Pythonで共有メモリを使ったプロセス間のデータのやり取りを実装(標準モジュール「mmap」)
mm.read(LENGTH) で共有メモリからバイト列を読み取ります。この時のLENGTHも準備段階で確保した大きさを超えるとエラーになります。 読み取ったバイト列をスライスで画像データ/幅/高さの該当部分を切り出します。(ここもうちょっとスマートな方法があれば教えてほしい…。) structを使って幅・高さはint型の数値に変換、画像データはnumpyのfrombufferを使って配列に変換した後、reshapeで成形し画像データの形にしています。
実行結果 実用性プロセス間のデータのやり取りの方法はいくつかありますが、共有メモリを使用する方法はとにかく高速にデータのやり取りができる点は大きなメリットかなと思います。後は、コードの書き方次第にはなりますが相互にデータのやり取りができるのも便利ですね。 今回はPython同士でデータをやり取りしましたが、共有メモリを扱うことができる他の言語(C++とかC#あたりでしょうか?)とも同じことができるはずです。
一方で送るデータをバイト化した時の長さを計算して指定する必要があるのが少し面倒でしょうか…。ある程度やり取りしたいデータのサイズが決まっている場合(例えば、同じサイズの画像データを扱う場合など)は使いやすいですが、文書など可変サイズのデータは難しそうです。