子プロセスは、プログラムの前半で作成されたマルチプロセッシング共有オブジェクトを介して生成されますか?
次の設定があります。
do_some_processing(filename):
for line in file(filename):
if line.split(',')[0] in big_lookup_object:
# something here
if __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はより優れたソリューションであり、ディスク上のファイル(シェルブまたはdbm)はさらに優れている可能性があります。この質問では、メモリ内ソリューションに特に興味がありました。最終的な解決策として、私はhadoopを使用しますが、ローカルのメモリ内バージョンも使用できるかどうかを確認したいと思いました。
marshal.load
、親と各子を呼び出します(各プロセスがモジュールをインポートします)。