[英]how to run a class as a process in python
我試圖同時在python中打開幾個串行端口。 我認為將每個端口作為一個類進程是有意義的,然后可以在其中將各自的屬性和方法分組。 好的,我認為多處理可能很好,但是我一直在努力使其工作。
為什么我不能在init
初始化串行端口。
使用不帶init
的super(serialManager, self)
,將執行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)
好的,我也嘗試了這個小腳本,但沒有成功。 為什么不執行運行?
from multiprocessing import Process
import time
class P(Process):
def __init__(self):
super(P, self).__init__()
def run(self):
print("run")
#time.sleep(0.5)
def main():
while True:
print("main")
time.sleep(2.5)
if __name__ == "__main__":
p = P()
p.start()
p.join()
main()
您的測試腳本執行run()很好。 根據流程文檔 :
如果子類覆蓋了構造函數,則必須確保在對進程進行其他任何操作之前,先調用基類的構造函數( Process。init ())。
您的serialManager
類在最后而不是__init__
serialManager
調用super()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.