マルチプロセッシング:プロセス間で大きな読み取り専用オブジェクトを共有しますか?

| | | | | | | | | | | | | | | | | | | | | | | | |

マルチプロセッシングを介して生成された子プロセスは、プログラムの前半で作成されたオブジェクトを共有しますか?

次の設定があります:

  do_some_processing(filename):for line in file(filename):if line.split( "、")[0] in big_lookup_object:# __name__ == "__main __":big_lookup_object = marshal.load( "file.bin")pool = Pool(processes = 4)print pool.map(do_some_processing、glob.glob( "*。data"))

大きなオブジェクトをメモリに読み込んでから、その大きなオブジェクトを利用する必要のあるワーカーのプールを作成しています。大きなオブジェクトには読み取り専用でアクセスします。アクセスする必要はありません。プロセス間で変更を渡します。

私の質問は、unix / cでプロセスを生成した場合のように、共有メモリにロードされた大きなオブジェクトですか、それとも各プロセスが独自のコピーをロードしますか。大きなオブジェクト?

更新:さらに明確にするために-big_lookup_objectは共有ルックアップオブジェクトです。それを分割して個別に処理する必要はありません。1つのコピーを保持する必要があります。分割する必要がある作業は、他の多くの大きなファイルを読み取り、それらの大きなファイル内のアイテムを検索することです。ルックアップオブジェクト。

さらなる更新:データベースは優れたソリューションであり、memcachedはより優れたソリューションであり、ディスク上のファイル(shelveまたはdbm)はさらに優れている可能性があります。この質問では、特に興味がありました。メモリソリューション。最終的なソリューションとしてはhadoopを使用しますが、ローカルのメモリ内バージョンも使用できるかどうかを確認したいと思いました。