質問: ### 知りたい事 同一コンピュータ上で別々に起動させたPythonアプリ同士を通信させる方法として、ソケットより高速な方法がありましたら、ご教示ください。 ###### 追記 環境はWindows10 64bit / Python3.6です。 ### 背景 以下のように二並列の処理が必要となった場合、multiprocessingモジュールを用いて、2つのプロセスを作成し、multiprocessing.Queue()などによりプロセス間通信を行う方法が最もシンプルであると思います。 ``` 親プロセス:子プロセスをスタートさせる 子プロセスA:外部と通信を行う 子プロセスB:受け取ったデータを加工する ``` しかしながら、multiprocessingを利用した上記の構成では、些細な機能の追加や、修正を行うだけで、アプリ全体を再起動させる必要があります。 例えば・・・ ・外部との通信方式が変わったため、子プロセスAのコードを変更する必要があるが、子プロセスBは止めたくない ・加工方法を修正したいが、外部との通信は途切れさせたくない プロセスAとプロセスBを別pyファイルに書き出し、importlibモジュールを用いて、変更があればimportlib.reloadするという方法も考えましたが、新たに三並列目のプロセスを追加することができません。 プロセスAとプロセスBを別々に起動させ、ソケットにより通信させることも検討しましたが、実測で8ミリ秒の遅延があり、パフォーマンスに優れません。 以上、どうかご教示よろしくお願い致します。
回答: MMAPを利用することで、目的の動作を行うことができました。 ###### 書き込み側 ``` import mmap with open("example.txt", "r+b") as f: mm = mmap.mmap(f.fileno(), 0) while True: mm[:] = b"適当なバイト数のデータ" ``` ###### 読み込み側 ``` import mmap with open("example.txt", "r+b") as f: mm = mmap.mmap(f.fileno(), 0) while True: mm.seek(0) print(mm.readline()) ``` ###### 任意のバイト数のファイル名(例:example.txt) ``` 0000000000000000000000 ``` 以上、自己解決とします。 ご回答頂きありがとうございました。