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

Dan*_*lay 3 python multithreading python-multithreading

我如何检查主线程是否从另一个(非守护程序,子线程)线程还存在?

子线程是非守护线程,我想检查Main线程是否仍在运行,并根据结果停止该非守护线程。

(使线程守护程序不适用于我的情况,因为stdout当线程设置为守护程序时,我的线程写入该线程会产生问题)

使用python 2.7

Rag*_* RV 6

  • 对于Python 2.7,您可以尝试以下操作:

    for i in threading.enumerate():
       if i.name == "MainThread":
           print i.is_alive()
    
    Run Code Online (Sandbox Code Playgroud)

    不建议在函数名称中使用小写驼峰,因此您应该使用i.is_alive()而不是i.isAlive()

  • 如果您喜欢单线,请尝试以下操作:

    is_main_thread_active = lambda : any((i.name == "MainThread") and i.is_alive() for i in threading.enumerate())
    
    Run Code Online (Sandbox Code Playgroud)

    然后调用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()
    
    Run Code Online (Sandbox Code Playgroud)

希望这对您有所帮助。