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