0

我一直在阅读 python 的线程池模块的代码

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

python 文档说,如果工作线程被设置为守护进程,它们将在主线程终止时退出。但这可能是一个丑陋的实现,更好的方法是使它们成为非守护进程并通过事件阻止它们。

这是我的问题:同时使用这两种戒烟策略是一个好的设计吗?将线程设置为非守护线程并在主线程终止之前将它们全部加入会更好吗?

4

1 回答 1

1

在查看这个特定的线程池模块时,它似乎被设计为允许您立即退出等待线程完成来工作您可以根据您希望如何处理当前正在处理的请求来选择其中一个:

  • 如果你不关心线程是否在处理请求的过程中死亡,只要让程序退出,守护线程就会得到处理。
  • 另一方面,如果您想确保线程仅在完全处理请求之间退出,请使用dismissWorkerswithdo_join=True或使用dismissWorkers后跟joinAllDismissedWorkers

该选择将根据您正在处理的内容和方式而有所不同。请注意,主例程中的示例代码执行其中一些和其他一些,这可能不是您在真实情况下想要做的——示例代码只是为了演示功能而设计的。

您可能会争辩说,当您确实关心它们如何/何时退出时,创建守护程序线程是一种不好的形式,并且修复库并不难,因此守护程序是您的工作线程在创建时的一个选项,而不是必要性。然而,目前,该模块选择了一个有利于易用性而不是一致性的默认值。

于 2013-04-28T20:46:03.690 回答