如何在python中将类作为进程运行

时间:2019-01-21 13:32:57

标签: python multiprocessing

我试图同时在python中打开几个串行端口。我认为将每个端口作为一个类进程是有意义的,然后可以在其中将各自的属性和方法分组。好的,我认为多处理可能很好,但是我一直在努力使其工作。

  1. 为什么不能在result1 [1] 1976 1980 1983 1985 result2 [1] 1977 1981 1984 1985 result3 [1] 1976 1977 1980 1981 1983 1984 1985 中初始化串行端口。

  2. 在不使用init的情况下使用super(serialManager, self)的情况下,将执行init,但不作为过程。

  3. 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)

1 个答案:

答案 0 :(得分:0)

您的测试脚本可以执行run()。根据{{​​3}}:

  

如果子类覆盖了构造函数,则必须确保其调用   在执行任何操作之前,基类构造函数(Process。 init ())   其他的过程。

您的serialManager类在末尾而不是在super()的开头调用__init__