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