- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这个问题已经回答 Android , Objective C和 C++之前,但显然不适用于 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/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!