键盘中断与python的多处理池

如何使用python的多处理池处理键盘中断事件?下面是一个简单的例子:

来自多处理导入池的


从时间上导入睡眠
从系统导入退出
def(u)square(i):
睡眠(1)
返回i*i
def go():
游泳池=游泳池(8)
尝试:
结果=pool.map(方格,范围(40))
除键盘中断外:
#****此部分从不执行****
pool.terminate()
打印“您取消了该计划!”
系统出口(1)
打印“\n最后,这里是结果:”,结果
如果名称=“\uuuuu main\uuuuuuuu”:
go()

当运行上面的代码时,当我按下^C键时,键盘中断会被触发,但该进程只是挂起,我必须从外部终止它

我希望能够随时按^C,使所有进程正常退出

这是一个Python错误。在threading.condition.wait()中等待条件时,键盘中断永远不会发送。复制:

导入线程
cond=threading.Condition(threading.Lock())
条件获得
条件等待(无)
打印“完成”

KeyboardInterrupt异常在wait()返回之前不会被传递,并且它永远不会返回,因此中断永远不会发生。键盘中断几乎肯定会中断条件等待

请注意,如果指定了超时,则不会发生这种情况;cond.wait(1)将立即接收中断。因此,解决方法是指定超时。为此,请更换

results=pool.map(方格,范围(40))

results=pool.map\u async(慢方,范围(40)).get(999999)

或类似的

发表评论