我有一个使用PySerial运行数据采集的进程。它现在工作得很好,但我必须做一件奇怪的事情才能让它持续工作,我不确定这是正常的,所以我问这个问题。
发生了什么:它看起来像连接现在和然后!大约每30-60分钟一次,有很大的误差条(可能持续几个小时也没问题,但有时经常发生)。
我的问题:这是标准吗?
我的临时解决方案:我写了一个简单的"重新打开"函数,看起来像这样:
def ReopenDevice(devObject):
try:
devObject.close()
devObject.open()
except Exception as e:
print("Error while trying to connect to device " + devObject.port + ". The error says: " + str(e))
time.sleep(2)
我所做的是,如果数据提取失败2分钟,我用这个功能重新打开设备,它继续正常工作,没有问题。
我的程序模型:这是一个GUI程序,用户点击"开始"之类的东西,这个按钮做一些准备工作,并通过multiprocessing.Process()
运行一个以
devObj = serial.Serial()
#... other params
devObj.open()
,然后该函数运行一个while循环,继续轮询数据,例如:
bytesToRead = devObj.inWaiting()
if bytesToRead != 0:
buffer = decodeString(devObj.read(bytesToRead))
#process buffer and push it to a list...
我知道问题发生的方式,是devObj.inWaiting()
一直返回零…不管设备上有多少数据!
这种行为是预期的吗?无论它是否发生,都应该始终考虑它?
在不频繁调用inWaiting()
后,问题减少了很多。无论如何,我保留了重新连接部分,以确保我的程序永远不会失败。感谢"Kobi K"提出问题的可能原因