私はマルチプロセッシングについての詳細を理解しようとしているマルチプロセッシング・スレッドプールは
の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ではほぼ確実に信号を送信していますWindows 7 AFAIKでは利用できません。 –