我一直在阅读python的threadpool模块的code。
它以这种方式操作线程:所有workerThread都被创建为守护线程。它还有一个解除机制,您可以通过设置事件安全地退出工作线程,在完成所有工作后,被解散的线程将在主线程中加入。
python doc表示如果工作线程设置了daemonic,它们将在主线程终止时退出。但它可能是一个丑陋的实现,更好的方法是让它们成为非守护进程并用事件阻止它们。
这是我的问题:使用这两种退出策略是一个好的设计吗?设置线程非守护进程并在主线程终止之前将它们全部连接起来是否更好?
答案 0 :(得分:1)
在查看这个特定的线程池模块时,它似乎被设计为 ,允许您按顺序退出,或等待线程完成。您可以选择其中一个,具体取决于您希望如何处理当前正在处理的请求:
dismissWorkers
与do_join=True
一起使用,或使用dismissWorkers
后跟joinAllDismissedWorkers
}。这种选择取决于您正在处理的内容和方式。请注意,主例程中的示例代码会执行其中一些示例代码,而另一些示例代码可能不是您在实际情况下要执行的操作 - 示例代码仅用于演示功能。
你可能会认为,当你做关心他们退出的方式/时间时,创建守护程序线程是不好的形式,并且修复库并不难以让守护进程成为一个选项。你的工作线程在创建时不是必需的。但是,目前,该模块选择的默认值有利于易用性而不是一致性。