У меня проблема с Python и я передаю серийный объект в качестве параметра отдельному процессу. Программа запускается в Windows 8, поэтому использование глобальных переменных не вариант.
from multiprocessing import Queue
from multiprocessing import Process
import os
import serial
from serial.tools import list_ports
from time import sleep
displayMessages = Queue()
modemPort = None
def processDisplayMessages(displayMessages):
while True:
msg = displayMessages.get() #should halt until message in queue
print msg
def processIncomingSerialMessages(modemPort, displayMessages):
while True:
line = modemPort.readline()
displayMessages.put(line)
def main():
print "Serial Send Test"
Process(target=processDisplayMessages, args = (displayMessages,)).start()
modemPort = serial.Serial('COM5', 57600, timeout=0.9) # open first serial port
Process(target=processIncomingSerialMessages, args = (modemPort, displayMessages)).start()
print "Back from launch"
sleep(0.1)
if __name__ == '__main__':
main()
Когда программа запускается, я получаю следующую ошибку:
Process Process-2:
Traceback (most recent call last):
File "c:\python27\lib\multiprocessing\process.py", line 258, in _bootstrap
self.run()
File "c:\python27\lib\multiprocessing\process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\matthew.parets\Documents\..Development\RaspberryPi\windows\seri
alRecvPrototype.py", line 27, in processIncomingSerialMessages
line = modemPort.readline()
File "c:\python27\lib\site-packages\serial\serialwin32.py", line 246, in read
if not self.hComPort: raise portNotOpenError
AttributeError: 'Serial' object has no attribute 'hComPort'
Если я помещаю открытый для последовательного порта (modemPort) в качестве первой строки processIncomingSerialMessages, программа работает нормально. Проблема в том, что мне нужно разделить ввод и вывод модема, поэтому мне нужно передать серийный объект в качестве параметра. А Python, похоже, это не нравится.
Может ли кто-нибудь увидеть мою ошибку или предложить альтернативу?