2017-06-19 9 views
0

私はPythonの "マルチプロセッシング"、特に "プール"の内容について読んできました。私はスレッドに精通していますが、ここで使用されているアプローチではありません。プロセスプール( "pool.map(myMethod、humungousDictionary)")に非常に大きなコレクション(ある種の辞書など)を渡すと、辞書をメモリに入れて各プロセスに渡すよりも、 1つの辞書しか存在しないのですか?私はメモリ使用が心配です。前もって感謝します。Pythonでのmultiprocessing.poolのメモリ使用に関する混乱

+0

マップメソッドにディクショナリを渡す理由はわかりませんが、ディクショナリはキーの繰り返し可能性にキャストされ、一部のキーは各サブプロセスに渡されます。 – newtover

+0

これは人為的な例でした。私は、複数のプロセスが大きなデータセットを処理しようとしている場合を説明したかっただけです。これは実際には数値アプリケーションのためのものです。そのため、この例は非常に大きなnumPy配列などで与えられている可能性があります。私はちょうどボンネットの下でそれにアクセスする必要がある各プロセスのためにデータセットが複製されることに懸念しています。 – LKeene

答えて

1

短い答えは:いいえです。プロセスは独自の独立したメモリ空間で動作し、効果的にデータを複製します。

辞書が読み取り専用、および修正が行われない場合は、ここではあなたが考えることができ、いくつかのオプションがあります

  1. は、データベースにデータを保存します。各作業者はデータを読み取り、独立して作業します
  2. os.forkを使用して複数のワーカーを生成する親プロセスを持つ単一のプロセスがあります。したがって、すべてのスレッドは同じコンテキストを共有します。
  3. 共有メモリを使用します。 Unixシステムは、プロセス間通信用に共有メモリを提供します。レースの可能性がある場合は、セマフォも必要になります。

考えられる解決策についてのより深い見識については、hereを参照することも考えられます。

+0

ありがとうColdspeed。共有メモリをWindows(およびMacOSX)で使用できますか? – LKeene

+0

@LKeeneこちらをご覧ください:https://docs.python.org/2/library/mmap.html ...うまくいけばクロスプラットフォームです。 –

関連する問題