🎃

標準入出力をパイプにリダイレクト (C++, C#, Python)

2023/03/19に公開約600字

共有メモリを使った高速な大規模データのプロセス間通信について「なんかシンプルな方法はないかなあ...」と考えているときに見つけたやり方です。

実装はこちら。
https://github.com/husty530/subprocess

基本的な考え方はパイプ通信です。これはマルチプロセスの実装で一般的に使われるものです。
パイプ通信ではプロセス間に親子の関係が必要です。今回はC++/C#が親プロセスとなり,子プロセスのPythonを呼び出し通信します。

さらに,子プロセスの実装をシンプルにするため親プロセスでは子プロセスの起動時に,子プロセスの標準入出力を親のパイプに繋ぎかえます(リダイレクト)。
これで子プロセスはアプリケーションとしての操作権を乗っ取られた操り人形の状態です。親に依存しない単体アプリとして子プロセスを作れるので,実装がスッキリすると思います。

また共有メモリを使った他のプロセス間通信の手段として,mmapを使ったメモリ共有について紹介した別記事もあります。併せてご覧ください。
mmapでは単なるメモリの置き場(共有スペース)を作るのでプロセスの優位性が偏らないという自由さがありますが,こちらは実ファイルが必要で排他制御も自前で実装する必要があります。
その実装の一例を示したのがこちらです。
https://zenn.dev/husty/articles/82f46d01101d83

Discussion

ログインするとコメントできます