【问题标题】:Check if the Main Thread is still alive from another thread从另一个线程检查主线程是否还活着
【发布时间】:2014-06-19 23:52:08
【问题描述】:

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

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

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

使用python 2.7

【问题讨论】:

  • 您对“仍在运行”的定义是什么?你的意思是还在做手术吗?还是还活着?
  • 我的意思是它还活着
  • 您可以将要写入的流作为提供给线程的其他上下文数据的一部分传递。那么就不会有任何东西阻止你把线程变成一个守护进程。
  • @UlrichEckhardt 我该怎么做?我只是在线程中使用print
  • 不要使用print,而是使用some_stream.write()

标签: python multithreading python-multithreading


【解决方案1】:
  • 对于 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()
    

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2022-08-06
    相关资源
    最近更新 更多