マルチプロセス

事例

【PyFMI】最小構成のMBD事例 第2章 その136【リアルタイム描画㉚】

マルチプロセス化実験コードを実際に動作させてみた。一応負荷は下がったが、それでも50ms間の負荷がかかるポイントが散見される。結果としてはPipeのプロセス間通信のオーバーヘッド。他のプロセス間通信でもこのオーバーヘッドはそれほど変わらない。今後の実験は通常のシングルプロセス版のコードをベースとする。
事例

【PyFMI】最小構成のMBD事例 第2章 その135【リアルタイム描画㉙】

マルチプロセス化した実験コードを提示。基本的な流れは一緒だが、Pipe関連のコードが増えた。deque毎にsend_bytesで送信。Scaleの入力やsin波生成指示を描画のメインプロセスからFMUのサブプロセスに送ってる。sin波をサブプロセス側にしないと、結局描画負荷でsin波が崩れる。
事例

【PyFMI】最小構成のMBD事例 第2章 その134【リアルタイム描画㉘】

Pipeの受信処理のコードを提示。受信自体は一関数だが、byte配列からdoubleに直すのに手間がかかってる感じ。Pipeの受信確認。受信関数自体は受信が来るまで戻ってこないので、無条件では呼びたくない。よって、poll関数で受信有無を確認した後に実際の受信処理をする。次回から実際のコードと動作確認。
事例

【PyFMI】最小構成のMBD事例 第2章 その133【リアルタイム描画㉗】

Pythonでサブプロセスの生成と開始について説明。Process関数を呼ぶだけ。引数にサブプロセス開始時に呼び出す関数とそれに対する引数を渡せる。今回はPipeを渡しておく。Pipeによる送信について説明。send_bytesを呼ぶだけ。dequeのままでは渡せないのでdouble型のarrayにする。
事例

【PyFMI】最小構成のMBD事例 第2章 その132【リアルタイム描画㉖】

Pythonでマルチプロセスをする上での手順確認。Pipeを使ったプロセス間通信が面倒そう。追加コードについては今回は触り程度。要importのライブラリ。multiprocessingのProcessとPipe。Pipeの生成。送受信の2つが取得できる。引数自体で双方向、片方向が切り替わる。
事例

【PyFMI】最小構成のMBD事例 第2章 その131【リアルタイム描画㉕】

スレッド以外で処理分散を検討。マルチプロセスでやれば分散できるかもしれない。マルチプロセスを実現するにはプロセス間通信が必要。Queue、Pipe、共有メモリとあるが、今回はPipeを使用してみる。ただし、通常の文字列送信方式ではなく、バイナリ方式。文字列方式は型を維持できて便利だがオーバーヘッドが大きい。