类方法作为用于多处理的工作程序

时间:2019-09-01 19:50:40

标签: python-3.x multiprocessing

我对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()

0 个答案:

没有答案