从另一个线程检查主线程是否仍然活着

10

如何从另一个(非守护,子)线程中检查主线程是否存活?

该子线程是非守护线程,我想检查主线程是否仍在运行,如果不再运行就停止这个非守护线程。

(将线程设置为守护线程对我的情况不好,因为我的线程会写入stdout,当线程设置为守护线程时会产生问题)

使用python 2.7


你对“仍在运行”的定义是什么?你是指仍在执行操作吗?还是仍然存活着? - aychedee
我的意思是它仍然存活着。 - Dan Barzilay
你可以将要写入的流作为线程给定的其他上下文数据之一进行传递。然后就没有任何东西会阻止你将该线程设置为守护进程。 - Ulrich Eckhardt
@UlrichEckhardt 我该怎么做?我只是在线程中使用 print - Dan Barzilay
不要使用 print,而是使用 some_stream.write() - Ulrich Eckhardt
2个回答

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()
    

    希望这能对你有所帮助。


    1

    除了Raghav所说的之外,你还可以像这样从主线程内部将主线程保存在全局变量中:

    mainThread = threading.currentThread() # current_thread() in py 3
    

    然后使用mainThread.isAlive()


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接