多处理线程池关闭,超时
问题描述:
我想用泳池对象的close()
方法正常停止泳池工作人员,但terminate()
那些在10秒内未完成执行的泳池工作人员。多处理线程池关闭,超时
started_at = int(time.time())
p.close() # this is blocking
if (int(time.time()) - started_at >= 10):
p.terminate()
就是这样。任何想法? :)
我也想过发送SIGTERM
s的线程,但他们共享相同的PID,所以我不能这样做。
答
如果您使用的是线程池,则可以使用全局变量(例如stopthreads
)。当它被设置为True
在工作线程的功能(S)的运行应该经常检查这个变量并退出:
def worker(data):
while True:
if stopthreads:
return None
# do other things
答
看来我第一次没有得到这个问题。
你也许可以在p.close()
呼叫发送到另一个进程,使用apply_async
例如,看看apply_async
调用不按时完成,只需调用p.terminate()
。
欲了解更多有关apply_async
的信息,请参考docs。
对不起,这是线程池在我的情况。修复它 –