这在之前的Android、Objective C和C++中得到了回答,但显然不是针对Python。如何可靠地确定当前线程是否为主线程?我可以想到一些方法,但没有一种方法真正让我满意,因为如果存在的话,它可能比threading.MainThread
更容易。
主线程在threading.py
中实例化,如下所示:
Thread.__init__(self, name="MainThread")
所以一个人可以
if threading.current_thread().name == 'MainThread'
但这个名字是固定的吗?我看到的其他代码检查了MainThread
是否包含在线程名称中的任何位置。
我可以在程序启动时存储对启动线程的引用,也就是说,在没有其他线程的情况下。这是绝对可靠的,但是对于这样一个简单的查询来说太麻烦了?
有没有更简洁的方法来做这件事?
如果像我一样,访问受保护的属性会给您带来Heebie jeebies,那么您可能需要使用
threading._MainThread
作为suggested的替代方法。在这种情况下,您可能会利用only the Main Thread can handle signals这一事实,因此以下人员可以执行此任务:更新以解决@user4815162342指出的潜在问题。
threading.current_thread().name == 'MainThread'
的问题是人们总是可以做到:或许以下更为可靠:
话虽如此,人们仍可能狡猾地:
但这个选项似乎更好;"after all, we're all consenting adults here."
更新:
Python 3.4引入了^{} ,这比上面的要好得多:
更新2:
对于Python<;3.4,最好的选择可能是:
这里的答案是旧的和/或坏的,所以这里有一个当前的解决方案:
此方法在Python3.4+之后可用。
相关问题 更多 >
编程相关推荐