【发布时间】:2020-06-11 09:43:15
【问题描述】:
我有一个应用程序,我需要从 Python 线程中的串行端口读取数据。由于它被放置在一个线程中,我虽然可以使用:
timeout = None
并在线程中使用以下代码:
# Setup
ser = serial.Serial(port, 38400, timeout = None)
# Loop
data = ser.read(2)
if data[0] == 2:
data += ser.read(data[1]-2) # Expected length of message
return data
else: # Handle error message
但是,当我将其与其他线程的频率进行比较时,我发现频率增加了近 200%,而是使用:
# Setup
ser = serial.Serial(port, 38400, timeout = 0)
# Loop
data = ser.read(1)
if data and data[0] == 2:
while len(data) < 2:
data += ser.read(1)
while len(data) < data[1]:
data += ser.read(1)
return data
else: # Handle error message
此外,在模拟过程中,数据被收集,然后使用套接字“重放”,当使用套接字时,我得到了更好的结果,让我相信我应该能够提高整体频率该应用程序甚至是实时的。但是我找不到任何关于 Python 中串行读取时间复杂度的相关讨论。
编辑:
经过进一步的修补和测试,我仍然无法找出读取串行端口的最佳方法......关于时间复杂度读取串行端口的最佳方法是否有任何“正确”答案?
// 雅各布
【问题讨论】:
-
你确定数据的结尾是可靠的吗?我总是等待一个特殊字符,因为在串行通信期间总是会超时
标签: python python-3.x serialization serial-port pyserial