私は同じ質問をしているので、私はこの質問をGoogleから見つけました。私は最近、競争状態に苦しんでいたソフトウェアをデバッグしたので、それはいいとは言えません。ここではそれが行った方法は次のとおりです。
- マスタープロセスが
- multiprocessing.Pool呼び出したスレッドに作用する千の口座〜のリストで3分をループ内で実行し、新しいスレッドeeryでマルチプロセッシング・プールを生み出し(max_proccesses = 32)、pool.map(func、accounts)です。これにより32のプロセスが開き、利用可能なプロセスに1つずつアカウントが適用されます。
- 元の著者には知られていませんが、このプロセスは完了までに3分以上かかりました。だから、次回マルチスレッドプールを作成するためにスレッドが生成されたときはどうでしたか?合計64のプロセスで32の新しいプロセスを生成しましたか?いいえ、実際にはそうではありませんでした。代わりに、私の結果がスクランブルされ、複数のスレッドが非決定論的な方法で私のデータに作用していることが示されました。
マルチプロセッシングモジュールをトレースして、スレッドセーフであるかどうかを知ることができます。一言で言えば、少なくとも私はそれが最初の手ではないことを目撃した。
スレッドプールの標準的な動作のようですが、私の質問とはまったく異なっています。異なる実スレッドからの同時実行でクラスプールのメソッドを呼び出そうとするとどうなりますか? ?今それは失敗するようです、私は私がdocで考えるような何かを読んだ。セロリを試してみることをお勧めします。http://www.celeryproject.org/そして、とにかくあなたの答えに感謝します。 –