从另一个线程检查主线程是否仍然存在

时间:2014-05-03 09:34:38

标签: python multithreading python-multithreading

如何从另一个(非守护程序,子)线程检查主线程是否处于活动状态?

子线程是一个非守护程序线程,我想检查主线程是否仍在运行,并根据结果停止此非守护程序线程。

(使线程守护程序对我的情况不利,因为我的线程写入 stdout ,当线程被设置为守护进程时会产生问题)

使用python 2.7

1 个答案:

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

希望这会对你有所帮助。