2016-10-05 4 views
0

У меня есть программа python, использующая последовательный порт для подключения к Arduino. Я хочу построить некоторые данные в реальном времени, не замедляя выполнение, поэтому я стараюсь многопроцессорствовать. Тем не менее, я получил ошибкуПоследовательный порт 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 __name__ == '__main__': 

Я не знаю, почему, но решить эту проблему для меня, и большинство примеров, кажется, делают это так, как хорошо.

Смежные вопросы