为什么python threadpool创建守护线程并最后加入它们?

时间:2013-04-28 06:40:09

标签: python threadpool daemon

我一直在阅读python的threadpool模块的code

它以这种方式操作线程:所有workerThread都被创建为守护线程。它还有一个解除机制,您可以通过设置事件安全地退出工作线程,在完成所有工作后,被解散的线程将在主线程中加入。

python doc表示如果工作线程设置了daemonic,它们将在主线程终止时退出。但它可能是一个丑陋的实现,更好的方法是让它们成为非守护进程并用事件阻止它们。

这是我的问题:使用这两种退出策略是一个好的设计吗?设置线程非守护进程并在主线程终止之前将它们全部连接起来是否更好?

1 个答案:

答案 0 :(得分:1)

在查看这个特定的线程池模块时,它似乎被设计为 ,允许您按顺序退出,等待线程完成。您可以选择其中一个,具体取决于您希望如何处理当前正在处理的请求:

  • 如果您不关心线程是否在处理请求的过程中死亡,只需让程序退出,然后将处理守护程序线程。
  • 另一方面,如果您想确保线程仅在完全处理请求之间退出,请将dismissWorkersdo_join=True一起使用,或使用dismissWorkers后跟joinAllDismissedWorkers }。

这种选择取决于您正在处理的内容和方式。请注意,主例程中的示例代码会执行其中一些示例代码,而另一些示例代码可能不是您在实际情况下要执行的操作 - 示例代码仅用于演示功能。

你可能会认为,当你关心他们退出的方式/时间时,创建守护程序线程是不好的形式,并且修复库并不难以让守护进程成为一个选项。你的工作线程在创建时不是必需的。但是,目前,该模块选择的默认值有利于易用性而不是一致性。