2017-09-05 9 views
1

私は現在、私の前にいた大学院生が書いたソフトウェアパッケージを含むプロジェクトに取り組んでいます。つまり、パッケージはハードウェアの制御システムであり、Module1とModule2を同時に実行する2つのアプリケーションがあります。 Clunkyですが、今のところうまく動作します。モジュール間のシグナル伝達

私の現在の問題は、この2つのPythonプログラムを互いに「話す」ことになります。 Module1はソートのコントロールパネルで、Module2は実行中のデータ収集のライブ出力プロットです。 Module1のクラスの特定の変数がtrueの場合、これを読み込んでそれに応じて反応できるようにModule2が必要です。 Module1にはTkinterフレームワークがあり、Module2にはPyQtが組み込まれています。

+0

ディスク上の一時ファイルに保存して読み戻しますか? – ifconfig

答えて

0

両方のプログラムが同じマシンで実行されていて、Linuxを使用している場合は、プロセス間で情報を共有するための特別なタイプのファイルである名前付きパイプを使用できます。名前付きパイプの使い方の簡単な例については、Python read named PIPEを参照してください。私はその例があなたの目的に合っているかどうかを調べるためにこの例を通して作業することを推奨します例が不十分な場合は、Pythonで名前付きパイプを作成する方法のドキュメントを読むことができます。https://docs.python.org/3/library/os.html#os.mkfifo

特定のケースを実装するには、変数の値を含む名前付きパイプにメッセージを送信するようにModule1を修正します変数の値が変更されたときはいつでも変数の値を設定するクラスメソッドでこれを行うことができます。これとは別に、Module2を変更して、名前付きパイプにデータがあるかどうか定期的にチェックすることもできます。データがある場合は、データを検索し、取得した変数値を使用してModule2を必要に応じて反応させます。

アプリケーションのスレッド化は、名前付きパイプの使用とは無関係です。名前付きパイプは、使用しているフレームワークに関係なく動作するはずです。名前付きパイプは、あるアプリケーションが書き込みを行っているファイルであると同時に、他のアプリケーションが読み込んでいるファイルであると考えるべきです。

+0

2つのアプリケーションの操作中にPIPEプロセスを実行するには、スレッドを使用する必要がありますか? –

+0

本当にありがたいです。これは間違いなく正しい方向に私を指摘している –

0

1つの方法は、発行者がコマンドを発行してサブスクライバがそれに反応するpub-subシステムに参加させることです。

0mqまたはkafkaを考えてください。

関連する問題