【发布时间】:2016-09-27 01:37:04
【问题描述】:
我想在 Linux 上的 python 中同时读取两个(或更多)串行端口(/dev/ttyUSB0 等)。我想从每个端口读取完整的行(以有数据的为准)并按收到的顺序处理结果(没有竞争条件)。作为一个简单的示例,可以将这些行写入单个合并文件。
我认为这样做的方法是基于 pyserial,但我无法完全弄清楚如何去做。 Pyserial 使用asyncio 和threads 进行非阻塞读取。 Asyncio 被标记为实验性的。如果在asyncio.Protocol.data_received() 中完成处理,我认为不会有任何竞争条件。在线程的情况下,处理可能必须由互斥体保护。
也许这也可以不在pyserial中完成。这两个串口可以作为文件打开,然后在数据可用时使用select()读取。
【问题讨论】:
-
创建两个线程,从串口读取数据并将要处理的数据放入队列中。查找“生产者消费者python”。
-
@AlexHall 听起来很容易解决这个问题。使用threads+queue+pyserial 发布答案以立即投票并接受:)