我有一个使用线程的程序。当我的程序关闭时,我的线程仍在运行,这是正常的。我想知道我的线程如何检测到主程序被终止;仅靠它自己。我该怎么做?
我的线程处于无限循环中并处理队列中的许多对象。我无法将我的线程定义为守护进程,否则我可能会在主程序结束时丢失一些数据。我不希望我的主程序在关闭时设置一个布尔值。
答案 0 :(得分:5)
如果您可以获得主线程的句柄,可以在其上调用is_alive()
。
或者,您可以调用threading.enumerate()
来获取所有当前生效线程的列表,并检查主线程是否在那里。
或者即使这是不可能的,那么您也许可以检查子线程是否是唯一剩余的非守护程序线程。
答案 1 :(得分:0)
如果你的经理跟踪了多少个开放线程,那么它会起作用吗?那些孩子在缺乏输入时会自杀?因此父进程将开始将数据推送到队列,并且worker将使用队列中的数据。如果一个工作人员在一段特定的超时时间内没有在队列中发现任何内容,它就会自行终然后主线程将跟踪有多少工人正在运营,并且如果活跃工人的数量低于给定的阈值,则定期启动新工人。