マルチプロセッシングによって生成された子プロセスは、プログラムで以前に作成されたオブジェクトを共有しますか?
私は次の設定をしています:
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 は共有ルックアップ オブジェクトです。それを分割して個別に処理する必要はありません。私はそれの単一のコピーを保持する必要があります。それを分割するために必要な作業は、他の多くの大きなファイルを読み取り、ルックアップ オブジェクトに対してそれらの大きなファイル内のアイテムを検索することです。
さらに更新: データベースは優れたソリューションです。この質問では、メモリ内ソリューションに特に興味がありました。最終的な解決策として Hadoop を使用しますが、ローカルのメモリ内バージョンも使用できるかどうかを確認したかったのです。