我在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上不可用。 –