2012-03-31 9 views
7

私は、RAMに変数を格納し、次にそれらの変数をいくつかの異なるプロセスから読み込んで更新する必要のあるマルチプロセスのPythonアプリケーション(プロセスはuwsgiによって生成されています)を持っています。利用可能なキャッシュオプションがたくさんあることはわかっていますが、見つかったものはすべて文字列を保存できるだけです。異なるPythonプロセスが同じ仮想メモリにアクセスし、それを変換したりコピーしたりせずにデータを共有することは可能ですか?Pythonプロセスはライブオブジェクトを共有できますか?

+0

[System V共有メモリのPythonでの可能な複製?](http://stackoverflow.com/questions/2219604/system-v-shared-memory-in-python) – Amber

+0

[処理](http: //pypi.python.org/pypi/processing)パッケージに含まれています。 – Keith

+0

私はすでにそれらの両方をチェックアウトしました。 sysv_ipcは文字列を格納するだけで、 'process'はプロセスがspwではなくuwsgiによって生成されるため動作しません。 –

答えて

6

POSH, Python Shared Objects,あなたがやりたいこと(SvsV-IPC共有メモリにPythonオブジェクトを置き、複数のプロセスからそれらを変更する)の少なくとも一部を実行し、独自の拡張モジュールを開発する際の出発点あなたがwsgi-spawnedサーバープロセスで必要とすることは、プロセス間でオブジェクトを共有するときにpickling/unpicklingオブジェクトに依存しないPythonの世界にはそれほど多くありません。

もう一つのことは、プロセス間の任意のネットワーク接続を介して共有するPyroです(つまり、Unix-Domainソケットを介して共有することもできます)。自分自身の経験では、 multiprocessingは、(プロキシ)オブジェクト管理を提供できます。

また、WSGIアプリケーションがプロセスをフォークしないようにするWebサーバーを取得できるかどうか、スレッド化を使用するかどうかを見てみましょう。この方法では、共用オブジェクトキャッシュ用に標準のPythonグローバルデータを使用するだけで済み、生成されたすべてのWSGIハンドラスレッドからアクセスできます。スレッド化されたWSGIサーバーは、例えば、CherryPy組み込みのwsgiserverです。これは、あなたが必要とする正確な要求を持つプロジェクトに使用しています。 mod_wsgiは、ワーカーMPMを使用してApacheを構成する場合(Apacheスレッドであり、新しいプロセスをフォークしないように)、状況に応じて動作します。

これらのすべてがオプションではない場合は、Webサーバーで実際に行っている実際の処理を外部プロセスに抽出し、WebページとRPCメカニズムを使用して通信して作業要求をプッシュしデータ? "バックエンド"処理サーバーは、標準ライブラリSimpleXMLRPCServerまたは類似のものを介してXML-RPCインターフェイスを提供する単純なマルチスレッドPythonプロセスにすることができます。

+0

私のコンピュータが修復されているのでこれをテストすることはできませんが、私が探している答えはスレッディングだと思います。以前はわかりませんでした。サーバーはuWSGIです。これは、フォークの代わりにスレッドを使用できると確信しています。パフォーマンスにどのような影響を与えるのか分かりませんが、それは別の質問です。 –

関連する問題