检查另一个线程是否还活着的主线程

10 投票
2 回答
10843 浏览
提问于 2025-04-18 05:13

我怎么能从另一个(非守护进程的子)线程检查主线程是否还活着?

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

( 把这个线程设置为守护线程对我来说不太合适,因为我的线程需要写入 stdout,这样做会在设置为守护线程时出现问题)

使用的是 Python 2.7

2 个回答

1

除了Raghav说的,你还可以在主线程内部把它保存到一个全局变量里,方法是:

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

然后你可以使用 mainThread.isAlive() 来检查它是否还在运行。

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

希望这些对你有帮助。

撰写回答