2012-04-11 31 views
0

私は複数回の処理(マルチプロセッシング)が必要なコードを持っており、複数のプロセスのそれぞれの出力を1つの共通メモリに格納してそれに応じて処理する必要があります。Pythonでのマルチプロセッシング/マルチスレッド..?

個々のプロセスはコードを実行し(辞書を維持する)、各プロセスは1つの共通メモリにデータを格納する必要があります(サイドバイサイドまたは可能であればすべての辞書を私はPythonでコードのこの部分を実行しています

process1 -> dict1, 
process2 -> dict2, 
process3 -> dict3 

>main_dict = dict1 + dict2 + dict3 

を.egの最後の。)

私はここでもマルチスレッドを行うことができますが、実際にはマルチスレッドはそれほど平行ではありません。だから私はマルチプロセッシングに向けることができます。多くの時間を無駄にするか、理想的なプロセッサを離れることなく、マルチプロセッシング・モードでのシナリオのこの種を維持するよう

おかげ

答えて

0

に...私にsubprocessモジュールを見てのプロセスを教えてください。

ドキュメントには、多くの例があります。
は最終的にそれがあなたの問題であなたを助けることができる...

+0

サブプロセスは外部コマンドを起動する方が適していますが、OPはPythonコードを使用するようです。 –

+0

私は最も簡単な/最良の方法はまだマルチスレッドを使用することだと思う... – evotopid

+0

-1。 Cedric Julienをエコーし​​ます。 –

6

あなたは私はあなたがPythonで辞書との共有メモリを行うことができますとは思わないが、multiprocessingモジュールを見てみたいとしている - 私は思いますそれらを直列化してキューに送る必要があります。

マルチスレッドはので、私は聞いたことがあるとして、実際にを平行されていません...だから私はマルチプロセッシングのために行くことができます。理想的なプロセッサを残して多くの時間やに無駄にすることなく、マルチプロセッシング・モードでのシナリオのこの種を維持するよう私にプロセスを教えてください。..

をあなたがいないなら、プロセッサを残したくない場合はあなたがIOに縛られていない限り、余分な並列性を得ることになります。その手段は、あなたがしてマルチプロセッシングやって同じプロセッサに滞在CPUの仕事の膨大な量をやっている場合にのみあなたを遅くすることで何

。並列性を高める唯一の方法は、他のプロセッサーに行くことです。 (たとえ "仮想"ハイパースレッドCPUであっても)

一方、メモリやネットワークからの読み込みによってスピードが落ちる場合は、threadingモジュールはより合理的であろう。しかし、それはあなたのCPUの並列性を高めるものではありませんGIL

要するに、あなたは矛盾したことを求めています。実際に必要なものを見つけ出し、1つのアプローチを選んでください。