检查当前线程是否是Python中的主线程?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (458)

如何可靠地确定当前线程是否是主线程?我能想到几种方法。

检查线程名

中实例化主线程。就像这样:

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

所以我们可以

if 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

最新情况:

Python 3.4上给的答案:

assert threading.current_thread() == threading.main_thread()

或者

isinstance(threading.current_thread(), threading._MainThread)
用户回答回答于
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

扫码关注云+社区

领取腾讯云代金券