为什么zeromq中的push / pull实现不会返回所有消息

时间:2013-07-11 22:33:32

标签: python zeromq pyzmq

我在zeromq中有一个客户端服务器对。奇怪的是,拉客户端只接收发送的所有其他消息。这是我的实现

## Push Server
import zmq

def post():
    context = zmq.Context()
    socket = context.socket(zmq.PUSH)
    socket.bind("tcp://127.0.0.1:3333")
    socket.send("hello")
    socket.close()

if __name__ == "__main__":
    post()

## Pull client
def read():
    context = zmq.Context()
    content = context.socket(zmq.PULL)
    content.connect("tcp://127.0.0.1:3333")

    while True:
        print content.recv()
        if content.recv() is "0":
            sys.exit()

if __name__ == "__main__":
    read()

为什么read()只接收所有消息的一半?

1 个答案:

答案 0 :(得分:1)

每次调用content.recv()时都会收到新消息。这是print语句的一个,if子句的另一个。请将消息读入本地变量。作为旁注,请使用'==',而不是'是'进行比较。

while True:
    msg = content.recv()
    print msg
    if msg == "0":
        sys.exit()