マルチプロセッシングを使用してファイルのアーカイブを高速化しようとしています。
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size,maxtasksperchild=1)
for file_name in files :
p_output=pool.map(gzip_file,[file_name])
pool.close()
pool.join()
関数gzip_file
は単純な gzip を実行し、成功したかどうかをログに記録します。
私の問題は、このスクリプトの一部の実行中に無期限にハングし、マシンに負荷がかかっていないことです。pool.map
ファイルごとに呼び出すのは間違っていますか?
更新: に切り替えました map_async
が、これは役に立ちませんでした。スクリプトがハングすると、常に発生し、子プロセスがゾンビになります。それは本当に奇妙です。
解決策:maxtasksperchild
この問題は、プールのパラメーターに関連する python 2.7.2 のバグ です。このパラメーターを削除してデフォルトのままにするとすぐに、すべてが期待どおりに機能するようになりました。詳しくはこのスレで