小编pau*_*ock的帖子

ZeroMQ挂在python多处理类/对象解决方案中

我正在尝试在Python(pyzmq)中将ZeroMQ与多处理一起使用。作为一个最小的(不可行的)示例,我有一个服务器类和一个客户端类,它们都继承自multiprocessing.Process。客户端作为子进程应向服务器子进程发送一条消息,该进程应打印该消息:

#mpzmq_class.py

from multiprocessing import Process
import zmq


class Server(Process):
    def __init__(self):
        super(Server, self).__init__()
        self.ctx = zmq.Context()
        self.socket = self.ctx.socket(zmq.PULL)
        self.socket.connect("tcp://localhost:6068")

    def run(self):
        msg = self.socket.recv_string()
        print(msg)


class Client(Process):
    def __init__(self):
        super(Client, self).__init__()
        self.ctx = zmq.Context()
        self.socket = self.ctx.socket(zmq.PUSH)
        self.socket.bind("tcp://*:6068")

    def run(self):
        msg = "Hello World!"
        self.socket.send_string(msg)

if __name__ == "__main__":
    s = Server()
    c = Client()
    s.start()
    c.start()
    s.join()
    c.join()
Run Code Online (Sandbox Code Playgroud)

现在,如果运行此命令,服务器进程似乎会挂在receive-call上msg = socket.receive_string()。在另一个(更复杂的)情况下,它甚至挂在- socket.connect("...")语句上。

如果我重写脚本以使用函数而不是类/对象,那么它将运行良好:

# mpzmq_function.py

from multiprocessing import Process
import zmq


def …
Run Code Online (Sandbox Code Playgroud)

multiprocessing zeromq python-3.x pyzmq

4
推荐指数
1
解决办法
885
查看次数

标签 统计

multiprocessing ×1

python-3.x ×1

pyzmq ×1

zeromq ×1