2012-01-16 6 views
5

実行に約10分かかるPythonプログラムがあります。だから私は物事をスピードアップするためにmultiprocessingからPoolを使用します。永続プロセスポストPythonプール

from multiprocessing import Pool 
p = Pool(processes = 6) # I have an 8 thread processor 
results = p.map(function, argument_list) # distributes work over 6 processes! 

それはちょうどそれから、はるかに高速に実行されます。神はPythonを祝福します!私はそれがそうであると思った。

しかし私はこれを行うたびに、pが範囲外になっても、プロセスとそのかなりのサイズの状態が残っていることに気付きました。効果的に、私はメモリリークを作成しました。プロセスは私のSystem Monitorアプリケーションでは現時点でCPUを使用しないPythonプロセスとして表示されますが、状態を維持するためにはかなりのメモリが必要です。

プールには、機能があります。close、、およびjoinです。これらのいずれかがプロセスを強制終了すると仮定します。誰でも私のプールに伝える最良の方法を知っていますか?p私はそれを終えましたか?

おかげであなたの助けのためにたくさん!

答えて

5

Python docsから、あなたがする必要があるように、それが見えます:

p.close() 
p.join() 

map()後労働者が終了した後、彼らがそうするのを待つ必要があることを示すために。