我有一个python程序,使用串口与Arduino连接。我想在不减慢执行速度的情况下实时绘制一些数据,所以我尝试多处理。但是,我得到了这个错误
serial.serialutil.SerialException: could not open port 'COM6': WindowsError(5, 'Access is denied.') # COM6 is the port connected to Arduino
令人惊讶的是,当多处理中的函数没有运行时,Arduino之间的连接仍然有效。我的代码如下:
class ArduinoThread(threading.Thread):
def __init__(self, portnum):
threading.Thread.__init__(self)
self.setName("Arduino")
self.Arduino = serial.Serial(port="COM"+str(portnum), baudrate=19200)
def run(self):
# some function
def MyPlot_realtime(DATA):
while True:
data = DATA.get(False)
plt.plot(data)
UNO = ArduinoThread(6)
UNO.start()
plt.ion()
pltQ = multiprocessing.Queue()
pltP = multiprocessing.Process(target=MyPlot_realtime, args=(pltQ,))
pltP.start()
while True:
# some calculation on data
UNO.update(data)
if pltQ.empty():
pltQ.put(data)
简单地注释一下多处理部分,代码就可以很好地工作。当存在多进程,但UNO.update(data)
仍在工作,而MyPlt_realtime
根本不工作时,该错误就会弹出。
(我的代码非常复杂,所以我简化了它。我正在使用另一个串行端口连接另一个设备。我也在使用Tkinter。希望问题不是来自这些部分)
发布于 2017-05-17 16:50:45
将您的主代码放在一个if条件中,如下所示:
if __name__ == '__main__':
我不知道为什么,但它为我解决了问题,大多数例子似乎也是这样做的。
https://stackoverflow.com/questions/39879152
复制相似问题