我在Windows 7上运行的Python 3.4多线程池没有终止预期
我想更多地了解多,并尝试写上另一个执行一个干净的小超时功能,这样做函数调用。但是我遇到了一个我无法弄清楚的问题。
据对多重Python文档:
终止()“立即停止工作进程没有完成出色的工作。”
但是,当我测试这个时,pool.terminate()
似乎等待工作进程完成而不是杀死它们!
所以,当我运行此代码:
import multiprocessing.pool
from time import sleep
def timeout(seconds, function, *args, **kwargs):
pool = multiprocessing.pool.ThreadPool(processes = 1)
result = pool.apply_async(function, args, kwargs)
try: result.get(seconds)
except multiprocessing.context.TimeoutError:
print("Process timed out")
pool.terminate()
pool.join()
print("Pool terminated")
finally:
pool.close()
def worker():
for n in range(5):
sleep(1)
print(n+1)
print("Process succeeded")
timeout(2.5, worker)
我希望得到的结果是这样的:
1
2
Process timed out
Pool terminated
而是我得到这个:
1
2
Process timed out
3
4
5
Process succeeded
Pool terminated
我知道result.get
由于消息“Process timed out”已成功打印,因此提出了TimeoutError
。而且我知道pool.terminate()
也是出于同样的原因,它似乎没有做任何事情!
我觉得这里有些东西我只是不理解。有人可以帮我吗?
我猜这是一个Windows问题 - 与Linux它几乎肯定发送信号,wh ich在Windows 7 AFAIK上不可用。 –