Я пытаюсь использовать многопроцессорность для чтения записи на последовательный порт, используя python 3.6 в Windows и Anaconda Prompt.
Процесс 'Logger' открывает первый последовательный порт и отправляет / получает некоторые пакеты данных. после того, как 'Logger' сделан с COM_PORT, я хочу, чтобы он пропустил доступ к процессу Steering для записи его в данные на COM_PORT. Я пробовал Pipe и очередь, но оба из-за одной и той же ошибки,
это мой код:
import sys
sys.path.append('./lib')
import binascii
import numpy # lib that is used to read .txt file as numerical data
import configparser
import time
import configobj as cf
from multiprocessing import Process, Value, Array,Pipe
import Tools as T
import pandas as pd
import serial # install pyserial
# this process will create the Mesh network and start logging process
def Logger(Pipe,RecievedMsg,Steering_Enable):
p_output,p_input=Pipe
COM_Port = serial.Serial(baudrate=115200,parity='N',stopbits=1,
bytesize=8,port='COM15',timeout=0.6)# open the COM port
Status,State=T.Coordinator_Config(COM_Port)
if Status!=0:
print("Coordinaator Configuration was not succesfull due to :
",T.StatusCheck(Status),"on",State,"State")
Steering_Enable.value=-1
else :
print("Coordinaator Configuration was...",T.StatusCheck(Status))
p_output.send(COM_Port)
Conn.close()
Steering_Enable.value=1
return 0
def Steering(Pipe,Steering_Enable,ShortNetAdd):
p_output,p_input=Pipe
while Steering_Enable.value==0:
if Steering_Enable.value==-1:
print("Network steering Failed!!")
return 0
elif Steering_Enable.value==1:
print("Network steering started!!")
COM_Port=p_input.recv()
print(type(COM_Port))
print("every 2min network steering is beeing enabled for new d
evices to join the network")
return 0
return 0
#Main part of program, configuring COORDINATOR and than waiting for responds
if __name__ == '__main__':
RecievedMsg= Value('i',0)
Steering_Enable=Value('i',0)
ShortNetAdd = Array('i', range(1))
Conn_in,Conn_out =Pipe()
Pr1=Process(target=Logger,args=
((Conn_in,Conn_out),RecievedMsg,Steering_Enable))
Pr2=Process(target=Steering,args=
((Conn_in,Conn_out),Steering_Enable,ShortNetAdd))
Pr1.start()
time.sleep(0.1)
Pr2.start()
time.sleep(0.1)
ошибка:
ValueError: ctypes objects containing pointers cannot be pickled
как я могу решить это?
Спасибо