2017-03-16 126 views
0

我想用泳池对象的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,所以我不能这样做。

+0

对不起,这是线程池在我的情况。修复它 –

回答

1

如果您使用的是线程池,则可以使用全局变量(例如stopthreads)。当它被设置为True

在工作线程的功能(S)的运行应该经常检查这个变量并退出:

def worker(data): 
    while True: 
     if stopthreads: 
      return None 
     # do other things 
0

看来我第一次没有得到这个问题。

你也许可以在p.close()呼叫发送到另一个进程,使用apply_async例如,看看apply_async调用不按时完成,只需调用p.terminate()

欲了解更多有关apply_async的信息,请参考docs