如何从另一个(非守护程序,子)线程检查主线程是否处于活动状态?
子线程是一个非守护程序线程,我想检查主线程是否仍在运行,并根据结果停止此非守护程序线程。
(使线程守护程序对我的情况不利,因为我的线程写入 stdout
,当线程被设置为守护进程时会产生问题)
使用python 2.7
答案 0 :(得分:5)
对于Python 2.7,您可以尝试:
for i in threading.enumerate():
if i.name == "MainThread":
print i.is_alive()
不推荐在函数名中使用较低的驼峰大小写,因此您应该使用i.is_alive()
而不是i.isAlive()
。
如果你喜欢单行试试这个:
is_main_thread_active = lambda : any((i.name == "MainThread") and i.is_alive() for i in threading.enumerate())
然后调用is_main_thread_active()
检查主线程是否处于活动状态。
但是,对于一次性使用,您可以直接使用它而无需创建函数。
any((i.name == "MainThread") and i.is_alive() for i in threading.enumerate())
检查this page以获取有关线程的更多信息。
在python 3.4中,存在一个返回主线程的专用函数,所以你可以使用这个衬里查看你的主线程是否还活着。
threading.main_thread().is_alive()
希望这会对你有所帮助。