2017-09-05 53 views
1

我目前正在开发一个项目,其中包含一位研究生在我之前写的软件包。简而言之,该软件包是用于硬件的控制系统,具有两个可同时运行的独立应用程序 - Module1和Module2。笨重,但现在它工作得很好。模块之间的信号传递

我当前的问题涉及让这两个Python程序相互“交谈”。 Module1是各种控制面板,Module2是发生数据收集的实时输出图。如果Module1的类中的某个变量为真,我需要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

为了在两个应用程序运行期间运行PIPE进程,是否需要使用线程? –

+0

我真的很感激它。这无疑给我指出了正确的方向 –

0

一种方法是让他们参与pub-sub系统,在这个系统中发布者发布命令并且订阅者对它们做出反应。

考虑0mqkafka