0

.join().close()を以下の場合Poolに電話する必要があるのはいつですか?ドキュメントを読むと、プロセスが終了するのを待っているようです。私はこのような何かを行う場合たとえば、:マルチプロセッシングPythonプール

while True: 
    pool = Pool(processes=4) 
    results = [] 
    for x in range(1000): 
     result = pool.apply_async(f, (x,)) 
     results.append(result) 

    for result in results: 
     result.get(timeout=1) 
    print "finished" 

は、私はまだ他のプロセスがjoin()close()で終了するのを待つ必要がありますか?私が仮定するように、私はすべての非同期結果を反復処理しているので、完了するために待っている(ブロッキング)ので、print finishedに到達するまでに、すべてのプロセスはすでに終了していますか?

これは間違いありませんか?

また、プロセスがいつ機能上で作業を開始するのですか?私は、ps -elfと並行して実行されている4つのプロセスがあることに気付きました。この場合、プロセスはresult.get()が呼び出された後で初めて機能上で動作しますか?

答えて

0

近い()

は、プールに提出されてから任意の複数のタスクを禁止します。すべてのタスクが完了すると、ワーカープロセスは終了します。

は、適切とすぐにプロセスが機能で作業を開始しますpool.apply_asyncを呼び出すようProper way to use multiprocessor.Pool in a nested loop

で開始する

良いリンクを終了するすべてのプロセスのために)(それを

待ちに参加します結果オブジェクトを返します。

関連する問題