私はPythonプロセス間でメモリを共有する方法を見つけようとしています。基本的には、複数のPythonプロセスがREAD(読み込みのみ)および使用(突然変異なし)できる必要があるオブジェクトがあります。今、これはredis + strings + cPickleを使って実装されていますが、cPickleは貴重なCPU時間を要しますので、私はそれを使用する必要はありません。私がインターネット上で見たpython共有メモリの実装のほとんどは、ファイルとピクルを必要とするように見えます。これは基本的に私がすでにやっていることです。Pythonプロセス間の共有メモリ
私は、基本的にメモリ内のpythonオブジェクトデータベース/サーバーと対応するCモジュールをデータベースとインターフェースするように書く方法があると思いますか?
基本的に、Cモジュールはオブジェクトに書き込むアドレスをサーバーに要求し、サーバーはアドレスで応答し、モジュールはオブジェクトを書き込み、指定されたキーを持つオブジェクトが書き込まれたことをサーバーに通知します指定された場所のディスクにコピーします。次に、特定のキーを持つオブジェクトを取得するプロセスがあれば、指定されたキーのメモリ位置をdbに問い合わせるだけで、サーバーはその位置で応答し、モジュールはその領域をメモリにロードする方法を知り、 pythonオブジェクトをpythonプロセスに戻してください。
これは完全に不合理であるか、実際に実装するのは難しいですか?私は不可能なことを追いかけていますか?どんな提案も大歓迎です。ありがとうインターネット。
あなたの提案しているものよりも同期を保つのがずっと面倒な実用的なソリューションをダンプする価値があるのは、あなたのCPU時間はどれだけ貴重ですか?あなたが求めていることはできますが、正しいことをするのは大変な痛みになります。 – millimoose
CPU時間が最も貴重です。基本的に、unpicklingオブジェクトは、20 ms(小さなものの場合)〜60 ms(大きなものの場合)のいずれかを取ることができます。私は個人的には、これらの時間の両方が長すぎると感じています。 編集:私はcPickleが十分な努力をしていないと思うわけではありません。 – nickneedsaname
メモリを共有することは可能ですが、共有オブジェクトは真剣に難しいでしょう...関連する質問はここにあります:http://stackoverflow.com/questions/1268252/python-possible-to-share-in-memory-data 2つの別々のプロセス間で(これはなぜ難しいのかを説明するAlex Martelliの素敵な記事があります)。 – ChristopheD