检查另一个线程是否还活着的主线程
我怎么能从另一个(非守护进程的子)线程检查主线程是否还活着?
这个子线程是一个非守护线程,我想检查主线程是否还在运行,并根据结果停止这个非守护线程。
( 把这个线程设置为守护线程对我来说不太合适,因为我的线程需要写入 stdout
,这样做会在设置为守护线程时出现问题)
使用的是 Python 2.7
2 个回答
1
除了Raghav说的,你还可以在主线程内部把它保存到一个全局变量里,方法是:
mainThread = threading.currentThread() # current_thread() in py 3
然后你可以使用 mainThread.isAlive()
来检查它是否还在运行。
15
对于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())
想了解更多关于线程的信息,可以查看 这个页面。
在Python 3.4中,有一个专门的函数可以返回主线程,所以你可以用这一行代码来检查你的主线程是否还活着。
threading.main_thread().is_alive()
希望这些对你有帮助。