0

我正在使用 pyside 并尝试与之进行异步串行通信,但 QtSerialPort 尚不可用,我已使用 pyserial 并将串行通信移动到另一个线程, moveToThread()但我必须定期检查是否有消息,所以我使用 aQTimer每 200 毫秒处理一次,但这个解决方案太过分了,如果我可以让 QtreadyRead每次有可用数据时发送一个信号,那么问题恰恰是:

是否有一个现成的模块可以在不破坏我对 pyside 的整个代码依赖的情况下提供帮助?如果没有,您有什么快速实施的技巧?提前致谢。

4

2 回答 2

1

只是避免使用 qtserialport,你使用 pyserial 是对的。一个好的方法是pyserial按照您自己的想法使用,但将其作为另一个进程(使用multiprocessing模块)运行,并使用Queues 从串行端口传递输入/输出。

在 pyside 代码中,您可以注册一个类似无限循环的函数,检查队列中的数据输入,并在数据进入时执行操作(基本上,触发串行传入事件)。您甚至可以使用python-async

这样,您可以在单个代码库中保持代码紧凑,但在功能方面松散耦合,而没有像 IPC 一样的简单队列带来额外的膨胀。

因为在 python 中的线程可能很棘手,因为全局解释器 lock,甚至更多,因为你已经让 Qt 线程模型(和事件循环)与 python 一起工作。根据经验:不要混合香蕉和西红柿。

于 2017-03-20T16:29:18.247 回答
0

我找到了一个解决方法,它使用 PyQt5 串行端口模块并构建一个独立模块来处理串行通信并使用进程间通信(IPC)或本地网络套接字与我的主应用程序进行通信,现在可以这样做,我没有问题开源这个串行通信模块,我的主要应用程序完好无损。

于 2017-03-20T16:07:27.697 回答