如何从另一个(非守护,子)线程中检查主线程是否存活?
该子线程是非守护线程,我想检查主线程是否仍在运行,如果不再运行就停止这个非守护线程。
(将线程设置为守护线程对我的情况不好,因为我的线程会写入stdout
,当线程设置为守护线程时会产生问题)
使用python 2.7
如何从另一个(非守护,子)线程中检查主线程是否存活?
该子线程是非守护线程,我想检查主线程是否仍在运行,如果不再运行就停止这个非守护线程。
(将线程设置为守护线程对我的情况不好,因为我的线程会写入stdout
,当线程设置为守护线程时会产生问题)
使用python 2.7
对于 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()
希望这能对你有所帮助。
除了Raghav所说的之外,你还可以像这样从主线程内部将主线程保存在全局变量中:
mainThread = threading.currentThread() # current_thread() in py 3
然后使用mainThread.isAlive()
。
print
。 - Dan Barzilayprint
,而是使用some_stream.write()
。 - Ulrich Eckhardt