今日これに遭遇しましたが、理由がわかりません。大規模なパイプラインの一部として、時間のかかる操作を実行するいくつかの関数がチェーン化されています。これらをここに含め、できる限りテスト例に絞り込みました。問題は、関数を直接呼び出すと、期待される出力 (たとえば、5 つの異なるツリー) が得られることです。ただし、マルチプロセッシング プールで apply_async (または適用は関係ありません) で同じ関数を呼び出すと、5 つのツリーが得られますが、それらはすべて同じです。
これを IPython ノートブックに文書化しました。これは次の場所で表示できます: http://nbviewer.ipython.org/gist/cfriedline/0e275d528ff1a8d674c6
セル 91 で、5 つのツリー (それぞれに 10 個のヒント) を作成し、2 つのリストを返します。1 つ目は非マルチプロセッシング ツリーを含み、2 つ目は apply_async からのものです。
セル 92 では、マルチプロセッシングを使用せずにツリーを作成した結果を確認できます。セル 93 では、マルチプロセッシングを使用してツリーを作成した結果を確認できます。
私が予想しているのは、2 つのテストの間に合計 10 個の異なるツリーが存在することですが、代わりにすべてのマルチプロセッシング ツリーは同一です。私にはほとんど意味がありません。
物事の関連バージョン:
- Linux 2.6.18-238.12.1.el5 x86_64 GNU/Linux
- Python 2.7.6 :: アナコンダ 1.9.2 (64 ビット)
- IPython 2.0.0
- Rpy2 2.3.9
ありがとう!クリス