1

マルチプロセッシングを使用してファイルのアーカイブを高速化しようとしています。

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 のバグ です。このパラメーターを削除してデフォルトのままにするとすぐに、すべてが期待どおりに機能するようになりました。詳しくはこのスレで

4

0 に答える 0