我对Python的多处理模块的理解有些迷茫。因为这是我在这里的第一篇文章,所以我希望即使我的英语有限,我的解释也足够好。
说明: 我有一个通过TCP / IP连接的传感器系统。我在无限循环中运行读数,以检测是否有物体通过传感器。如果检测到物体,则传感器过程将信号发送到主过程,作为已检测到某物的信息。我使用Pipe模块在两个进程之间传输信息。 到目前为止,下面显示的代码可以按预期工作,没有失败。我将代码缩短到最少,因为我的问题更笼统。
问题: 'Master()'类开始新的过程。我创建了'Sensor()'类的实例来设置通信套接字。之后,我将方法“ StartDetection()”用作新进程的工作程序。这是这样做的方法吗?由于某种原因,我在'Master()'类内创建'Sensor'类的实例,然后将该方法用作辅助对象时感觉不太好。 我还可以想象定义一个普通函数(不带类),在内部实例化“ Sensor()”并将其用作辅助对象(多合一)。
启动这样一个长期运行的过程的正确方法是什么?
from multiprocessing import Process, Pipe
import socket
class Master():
def __init__(self):
self.mainPipe, self.processPipe = Pipe()
self.sensor = Sensor(self.processPipe)
def StartSensorReading(self):
self.process = Process(target=self.sensor.StartDetection)
self.process.start()
# Do something else
self.process.join()
class Sensor():
def __init__(self, pipe):
self.pipe = pipe
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('192.168.1.99', 64000)
self.sock.connect(server_address)
def StartDetection(self):
while True:
message = 'SW,01,065,+000022222\r\n'.encode('ASCII')
self.sock.send(message)
print(self.sock.recv(100))
if __name__ == '__main__':
master = Master()
master.StartSensorReading()