小编典典

异步读取两个串行端口

python

我想在Linux上的python中同时读取两个(或多个)串行端口(/ dev /
ttyUSB0等)。我想从每个端口读取完整的行(无论哪个都有数据),并按收到的顺序处理结果(无竞争条件)。作为一个简单的示例,可以将这些行写入单个合并的文件中。

我认为这样做的方法是基于pyserial的,但是我不太清楚该怎么做。Pyserial使用asynciothreads进行非阻塞读取。Asyncio被标记为实验性的。我假设如果在中进行处理,就不会有任何竞争条件
asyncio.Protocol.data_received()。在线程的情况下,处理可能必须由互斥锁保护。

也许这也可以不用pyserial来完成。可以将两个串行端口作为文件打开,然后使用读取数据select()


阅读 212

收藏
2021-01-16

共1个答案

小编典典

正如@AlexHall在评论中所建议的,以下是一种解决方案,该解决方案对每个串行端口使用一个线程,并使用一个队列来同步访问:

import serial
import Queue
import threading

queue = Queue.Queue(1000)

def serial_read(s):
    while True:
        line = s.readline()
        queue.put(line)

serial0 = serial.Serial('/dev/ttyUSB0')
serial1 = serial.Serial('/dev/ttyUSB1')

thread1 = threading.Thread(target=serial_read, args=(serial0,),).start()
thread2 = threading.Thread(target=serial_read, args=(serial1,),).start()

while True:
    line = queue.get(True, 1)
    print line

也许可以更优雅地编写此代码,但是它可以工作。

2021-01-16