私は 60GB の SciPy Array (Matrix) を持っており、5 つ以上multiprocessing
Process
のオブジェクト間で共有する必要があります。numpy-sharedmem を見て、SciPy リストでこのディスカッションを読みました。2つのアプローチがあるようです.anumpy-sharedmem
を使用し、multiprocessing.RawArray()
NumPydtype
をsにマッピングしctype
ます。さて、numpy-sharedmem
進むべき道のようですが、良い参考例はまだ見ていません。配列 (実際には行列) は読み取り専用になるため、ロックは必要ありません。サイズが大きいため、コピーは避けたいと思います。配列の唯一のコピーを配列として作成し、それをオブジェクトに渡すのが正しい方法のように思えますか? いくつかの具体的な質問:sharedmem
Process
共有メモリハンドルを実際にサブに渡す最良の方法は何
Process()
ですか? 1 つの配列を渡すためだけにキューが必要ですか? パイプの方がいいですか?Process()
サブクラスの initに引数として渡すことはできますか?上記でリンクしたディスカッションで
numpy-sharedmem
は、64 ビットセーフではないという言及がありますか? 私は間違いなく、32 ビットでアドレス指定できない構造をいくつか使用しています。RawArray()
アプローチにトレードオフはありますか?遅い、バグ?numpy-sharedmem メソッドに ctype から dtype へのマッピングは必要ですか?
これを行うオープンソースコードの例はありますか? 私は非常に実践的な学習者であり、見るべき良い例がなければ、これを機能させるのは困難です。
他の人のためにこれを明確にするために提供できる追加情報がある場合は、コメントしてください。追加します. ありがとう!
これは Ubuntu Linux と Mac OS で実行する必要がありますが、移植性は大きな問題ではありません。