質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

10367閲覧

Python 別で起動したプロセス同士のプロセス間通信について

decoyxyz

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/04/27 19:16

編集2019/04/28 14:10

知りたい事

同一コンピュータ上で別々に起動させたPythonアプリ同士を通信させる方法として、ソケットより高速な方法がありましたら、ご教示ください。

追記

環境はWindows10 64bit / Python3.6です。

背景

以下のように二並列の処理が必要となった場合、multiprocessingモジュールを用いて、2つのプロセスを作成し、multiprocessing.Queue()などによりプロセス間通信を行う方法が最もシンプルであると思います。

親プロセス:子プロセスをスタートさせる 子プロセスA:外部と通信を行う 子プロセスB:受け取ったデータを加工する

しかしながら、multiprocessingを利用した上記の構成では、些細な機能の追加や、修正を行うだけで、アプリ全体を再起動させる必要があります。
例えば・・・
・外部との通信方式が変わったため、子プロセスAのコードを変更する必要があるが、子プロセスBは止めたくない
・加工方法を修正したいが、外部との通信は途切れさせたくない

プロセスAとプロセスBを別pyファイルに書き出し、importlibモジュールを用いて、変更があればimportlib.reloadするという方法も考えましたが、新たに三並列目のプロセスを追加することができません。

プロセスAとプロセスBを別々に起動させ、ソケットにより通信させることも検討しましたが、実測で8ミリ秒の遅延があり、パフォーマンスに優れません。

以上、どうかご教示よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

MMAPを利用することで、目的の動作を行うことができました。

書き込み側

Python

1import mmap 2 3with open("example.txt", "r+b") as f: 4 mm = mmap.mmap(f.fileno(), 0) 5 while True: 6 mm[:] = b"適当なバイト数のデータ"
読み込み側

Python

1import mmap 2 3with open("example.txt", "r+b") as f: 4 mm = mmap.mmap(f.fileno(), 0) 5 while True: 6 mm.seek(0) 7 print(mm.readline())
任意のバイト数のファイル名(例:example.txt)

text

10000000000000000000000

以上、自己解決とします。
ご回答頂きありがとうございました。

投稿2019/04/30 16:29

decoyxyz

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

IPC (inter-process communication)が検索ワードです。

Linuxとかだったらposix_ipcがお勧めですよ。

投稿2019/04/27 21:30

編集2019/04/27 21:31
YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問