2016-10-05 570 views
0

我有一個使用串口與Arduino連接的python程序。我想實時繪製一些數據而不會減慢執行速度,所以我嘗試了多處理。然而,我得到了錯誤多處理串口WindowsError(5,'訪問被拒絕')

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的爲好。希望這些問題並非來自那些部分)

回答

0

把你的主代碼在if條件如下:

if __name__ == '__main__': 

我不知道爲什麼,但它解決了這個問題對我來說,最例子似乎那樣做也是如此。