这个问题以前已经在Android、Objective C和C++上得到了回答,但显然没有。如何可靠地确定当前线程是否是主线程?我能想到几种方法,但没有一种能让我真正满意,考虑到它可能和threading.MainThread
一样简单,如果它存在的话。
检查线程名称
主线程在threading.py
中是这样实例化的:
Thread.__init__(self, name="MainThread")
所以我们可以这样做
if threading.current_thread().name == 'MainThread'
但是这个名字是固定的吗?我见过的其他代码检查线程名称中是否包含MainThread
。
存储启动线程
我可以在程序启动时存储对启动线程的引用,即在还没有其他线程的时候。这绝对是可靠的,但是对于这样一个简单的查询来说太麻烦了?
有没有更简洁的方法呢?
发布于 2017-11-07 10:17:54
这里的答案是陈旧的和/或糟糕的,所以这里有一个当前的解决方案:
if threading.current_thread() is threading.main_thread():
...
从Python 3.4+开始,就可以使用此方法。
发布于 2016-09-15 23:05:31
如果像我一样,访问受保护的属性会让您心烦意乱,那么您可能需要以suggested的身份使用threading._MainThread
的替代方案。在这种情况下,您可以利用only the Main Thread can handle signals这一事实,因此以下代码可以完成此工作:
import signal
def is_main_thread():
try:
# Backup the current signal handler
back_up = signal.signal(signal.SIGINT, signal.SIG_DFL)
except ValueError:
# Only Main Thread can handle signals
return False
# Restore signal handler
signal.signal(signal.SIGINT, back_up)
return True
已更新以解决@user4815162342指出的潜在问题。
https://stackoverflow.com/questions/23206787
复制相似问题