gpt4 book ai didi

python - 在 Python 中检查当前线程是否是主线程

转载 作者:IT老高 更新时间:2023-10-28 22:07:30 29 4
gpt4 key购买 nike

这个问题已经回答 Android , Objective CC++之前,但显然不适用于 Python。如何可靠地确定当前线程是否是主线程?我可以想到一些方法,但没有一个真正让我满意,考虑到它可能就像与 threading.MainThread 如果存在的话一样简单。

检查线程名称

主线程在 threading.py 中实例化如下:

Thread.__init__(self, name="MainThread")

这样就可以了

if threading.current_thread().name == 'MainThread'

但是这个名字是固定的吗?我见过的其他代码检查 MainThread 是否包含在线程名称中的任何位置。

存储起始线程

我可以在程序启动时存储对启动线程的引用,即当还没有其他线程时。这绝对可靠,但是对于这样一个简单的查询来说太麻烦了?

有更简洁的方法吗?

最佳答案

threading.current_thread().name == 'MainThread' 的问题在于人们总是可以这样做:

threading.current_thread().name = 'MyName'
assert threading.current_thread().name == 'MainThread' # will fail

也许以下更可靠:

threading.current_thread().__class__.__name__ == '_MainThread'

话虽如此,但还是可以狡猾地做:

threading.current_thread().__class__.__name__ = 'Grrrr'
assert threading.current_thread().__class__.__name__ == '_MainThread' # will fail

但这个选项似乎仍然更好; "after all, we're all consenting adults here."

更新:

Python 3.4 引入 threading.main_thread()这比上面的要好得多:

assert threading.current_thread() is threading.main_thread()

更新 2:

对于 Python < 3.4,也许最好的选择是:

isinstance(threading.current_thread(), threading._MainThread)

关于python - 在 Python 中检查当前线程是否是主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206787/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com