次の要件を持つ プロセス間通信(IPC) framework\techniqueとは何ですか?
UPDATE 1:プロセスは同じホスト上にあり、同じバージョンのPythonと他のモジュールを使用します
UPDATE 2:プロセスはユーザーによって独立して実行され、どのプロセスも他のプロセスを生成しません
ネイティブオブジェクトは、プロセス間で共有されません(参照カウントのため)。
代わりに、それらをpickle化して、UNIXドメインソケット、mmap、zeromq、または同時アクセス用に設計されたsqlite3などの仲介者を使用して共有できます。
最初に multiprocessing を使用します。
複数のCPUが必要な場合は、 celery を参照してください。
execnet と Pyro の両方でPyPy <-> CPython
通信について言及しています。 Python Wikiの Parallel Processing ページからの他のパッケージもおそらく適しています。
Parallel Python は一見の価値があるかもしれませんが、Windows、OS X、およびLinuxで動作します(かつてUltraSPARC Solaris 10マシンで使用したことを思い出しているようです)。 PyPyで動作するかどうかはわかりませんが、 Psycoで動作するようです です。
いくつかのテストの後、以下のアプローチがmmap
を使用するLinuxで機能することがわかりました。
Linuxには/dev/shm
があります。 POSIX shm_open
を使用して共有メモリを作成すると、このフォルダに新しいファイルが作成されます。
Pythonのmmap
モジュールはshm_open
関数を提供していませんが。通常のopen
を使用して/dev/shm
にファイルを作成できますが、実際には類似しており、メモリに常駐しています。 (os.unlink
を使用して削除してください)
次に、IPCの場合、mmap
を使用して、そのファイルをさまざまなプロセスの仮想メモリ空間にマップできます。すべてのプロセスがそのメモリを共有します。 Pythonは、メモリをバッファとして使用し、その上にバイトやnumpy配列などのオブジェクトを作成できます。または、ctypes
インターフェースを介して使用できます。
もちろん、競合状態を回避するためにプロセス同期プリミティブが必要です。
mmap doc 、 ctypes doc およびnumpy.load
オプションがある mmap_mode
を参照してください。