6

我有一个使用线程的程序。当我的程序关闭时,我的线程仍在运行,这很正常。我想知道我的线程如何检测到主程序已终止;仅由其本身。我该怎么做?

我的线程处于无限循环并处理队列中的许多对象。我不能将我的线程定义为守护进程,否则我可能会在主程序结束时丢失一些数据。我不希望我的主程序在关闭时设置一个布尔值。

4

2 回答 2

5

如果您可以获得主线程的句柄,则可以调用is_alive()它。

或者,您可以调用threading.enumerate()以获取所有当前活动线程的列表,并检查主线程是否在其中。

或者,即使那是不可能的,那么您也许可以检查子线程是否是唯一剩余的非守护线程。

于 2012-07-30T16:37:40.530 回答
0

如果你的经理跟踪有多少打开的线程,然后孩子们在输入饥饿时自杀,这会起作用吗?因此,父级将开始将数据推送到队列中,而工作人员将使用队列中的数据。如果一个工作人员在特定的超时时间内没有在队列中发现任何东西,它就会杀死自己。然后,主线程将跟踪有多少工作人员正在运行,并在活动工作人员的数量低于给定阈值时定期启动新工作人员。

于 2012-07-30T16:31:45.817 回答