タグ付けされた質問 「shared-memory」

4
マルチプロセッシングの共有メモリオブジェクト
私はメモリに大きなnumpy配列があるfuncとします。この巨大な配列を(他のいくつかのパラメーターと共に)入力として受け取る関数があります。func異なるパラメータを使用して、並行して実行できます。例えば: def func(arr, param): # do stuff to arr, param # build array arr pool = Pool(processes = 6) results = [pool.apply_async(func, [arr, param]) for param in all_params] output = [res.get() for res in results] マルチプロセッシングライブラリを使用すると、その巨大な配列が複数のプロセスにコピーされます。 異なるプロセスに同じ配列を共有させる方法はありますか?この配列オブジェクトは読み取り専用であり、変更されることはありません。 arrが配列ではなく任意のpythonオブジェクトである場合、もっと複雑なことは何ですか?それを共有する方法はありますか? [編集済み] 私は答えを読みましたが、私はまだ少し混乱しています。fork()はコピーオンライトであるため、Pythonマルチプロセッシングライブラリで新しいプロセスを生成するときに追加のコストを呼び出さないでください。しかし、次のコードは大きなオーバーヘッドがあることを示唆しています: from multiprocessing import Pool, Manager import numpy as np; import …

5
Linux in Cで共有メモリを使用する方法
私のプロジェクトの1つに少し問題があります。 私は共有メモリを使用してよく文書化された例を見つけようとしましfork()たが、成功しませんでした。 :基本的なシナリオは、ユーザーがプログラムを起動したときに、私は、共有メモリ内の2つの値格納する必要があるということですCURRENT_PATHでのchar *とfile_nameにもあるのchar *を。 コマンド引数に応じて、新しいプロセスが開始され、file_name変数は読み取り専用であるがfork()、そのプロセスは共有メモリに格納されているcurrent_path変数を読み取り、変更する必要があります。 あなたが私に指示することができるサンプルコード(可能な場合)を含む共有メモリに関する良いチュートリアルはありますか?
117 c  linux  fork  shared-memory 

1
グループ化されたパンダのDataFrameに効率的に関数を効率的に適用する
DataFrame(混合データ型の)非常に大きなグループに関数を適用する必要があることが多く、複数のコアを利用したいと考えています。 グループからイテレータを作成してマルチプロセッシングモジュールを使用できますが、すべてのグループと関数の結果をプロセス間のメッセージングのためにピクルする必要があるため、効率的ではありません。 酸洗いを回避する方法、またはDataFrame完全なコピーを回避する方法はありますか?マルチプロセッシングモジュールの共有メモリ機能はnumpy配列に限定されているようです。他のオプションはありますか?

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

1
サービスでのメモリマップの使用
サービスとして(を使用して-service)スイッチとしても実行できるアプリケーションを作成しました。コマンドプロンプトからサービスを実行している場合、これは問題なく完全に機能します(真のサービスとして実行されていないときにコンソールからデバッグできるように何かを設定しています)。しかし、それを真のサービスとして実行しようとした後、アプリケーションを使用して既存のメモリマップを開くと、エラーが発生します... 指定されたファイルが見つかりません。 サービスとして、またはコンソールで実行する方法: [STAThread] static void Main(string[] args) { //Convert all arguments to lower args = Array.ConvertAll(args, e => e.ToLower()); //Create the container object for the settings to be stored Settings.Bag = new SettingsBag(); //Check if we want to run this as a service bool runAsService = args.Contains("-service"); //Check if …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.