我试图同时在python中打开几个串行端口。我认为将每个端口作为一个类进程是有意义的,然后可以在其中将各自的属性和方法分组。好的,我认为多处理可能很好,但是我一直在努力使其工作。
为什么不能在result1
[1] 1976 1980 1983 1985
result2
[1] 1977 1981 1984 1985
result3
[1] 1976 1977 1980 1981 1983 1984 1985
中初始化串行端口。
在不使用init
的情况下使用super(serialManager, self)
的情况下,将执行init
,但不作为过程。
loop_starter
未执行,为什么?
如何正确地将所有道具放在一个类中并在该类中处理方法?
致谢
super(serialManager, self).__init__(target=self.loop_starter,args=(serial_port, baudrate, timeout))
好的,我也尝试了这个小脚本,但没有成功。为什么不执行运行?
from multiprocessing import Process
import serial
import time
class serialManager(Process):
def __init__(self, serial_port, baudrate=57200, timeout=1):
self.light = False
self.ser = serial.Serial(serial_port, baudrate=baudrate, timeout=timeout) #1
#super(serialManager, self) #2
#self.loop_starter(serial_port, baudrate, timeout) #2
super(serialManager, self).__init__(target=self.loop_starter,args=(serial_port, baudrate, timeout)) #3
def loop_starter( self, serial_port, baudrate, timeout):
print("loop_iterator init")
ser = serial.Serial(serial_port, baudrate=baudrate, timeout=timeout)
self.loop(ser)
def loop(self, ser):
self.light = not (self.light)
values = bytearray([2, 82, 49, 4])
ser.write(values)
print("loop")
time.sleep(2)
#def run(self):
#print('run')
def main():
print("main")
if __name__ == "__main__":
msm = serialManager("COM7")
print ("inited")
try:
msm.start()
print ("started")
#while True:
#main()
except KeyboardInterrupt:
print("caught in main")
finally:
msm.join()
while True:
main()
time.sleep (1)
答案 0 :(得分:0)
您的测试脚本可以执行run()。根据{{3}}:
如果子类覆盖了构造函数,则必须确保其调用 在执行任何操作之前,基类构造函数(Process。 init ()) 其他的过程。
您的serialManager
类在末尾而不是在super()
的开头调用__init__