2016-10-31 15 views
0

私はDjangoプロジェクトを持っています。 プール()オブジェクトを含むパッケージ変数を作成し、Djangoビュー(その並列方法で実行される)からそのプールを使用しようとすると、スレッドセーフな方法でしょうか?それを行う他の方法はありますか?Pythonマルチプロセッシングのプールスレッドは安全ですか?

from multiprocessing import Pool 
general_executor_pool = Pool() 

答えて

3

私は同じ質問をしているので、私はこの質問をGoogleから見つけました。私は最近、競争状態に苦しんでいたソフトウェアをデバッグしたので、それはいいとは言えません。ここではそれが行った方法は次のとおりです。

  1. マスタープロセスが
  2. multiprocessing.Pool呼び出したスレッドに作用する千の口座〜のリストで3分をループ内で実行し、新しいスレッドeeryでマルチプロセッシング・プールを生み出し(max_proccesses = 32)、pool.map(func、accounts)です。これにより32のプロセスが開き、利用可能なプロセスに1つずつアカウントが適用されます。
  3. 元の著者には知られていませんが、このプロセスは完了までに3分以上かかりました。だから、次回マルチスレッドプールを作成するためにスレッドが生成されたときはどうでしたか?合計64のプロセスで32の新しいプロセスを生成しましたか?いいえ、実際にはそうではありませんでした。代わりに、私の結果がスクランブルされ、複数のスレッドが非決定論的な方法で私のデータに作用していることが示されました。

マルチプロセッシングモジュールをトレースして、スレッドセーフであるかどうかを知ることができます。一言で言えば、少なくとも私はそれが最初の手ではないことを目撃した。

+0

スレッドプールの標準的な動作のようですが、私の質問とはまったく異なっています。異なる実スレッドからの同時実行でクラスプールのメソッドを呼び出そうとするとどうなりますか? ?今それは失敗するようです、私は私がdocで考えるような何かを読んだ。セロリを試してみることをお勧めします。http://www.celeryproject.org/そして、とにかくあなたの答えに感謝します。 –

関連する問題