Python和ZMQ:REP套接字没有收到所有请求

时间:2014-08-05 05:30:31

标签: python zeromq google-compute-engine pyzmq

我有一个REP套接字连接到许多REQ套接字,每个套接字都运行在一个单独的Google Compute Engine实例上。我正在尝试完成ZMQ Guide's syncpub/syncsub example中详述的同步,我的代码与该示例非常相似:

context = zmq.Context()
sync_reply = context.socket(zmq.REP)
sync_reply.bind('tcp://*:5555')

# start a bunch of other sockets ...

ready = 0
while ready < len(all_instances):
    sync_reply.recv()
    sync.reply.send(b'')
    ready += 1

每个实例都运行以下代码:

context = zmq.Context()
sync_request = context.socket(zmq.REQ)
sync_request.connect('tcp://IP_ADDRESS:5555')

sync_request.send(b'')
sync_request.recv()

# start other sockets and do other work ...

此系统可以正常工作,直到一定数量的实例(大约140个)。但是,更多,REP套接字将不会收到所有请求。看起来它每次丢弃的请求都是来自不同的实例,这让我相信所有的请求确实都被发送了,但是套接字只是接收不到(大约)140个。

我已经尝试为插座设置高水位标记,在几秒钟内间隔出请求,切换到ROUTER / DEALER套接字 - 所有这些都没有任何改进。最令我困惑的部分是syncsub / syncpub示例代码(上面链接的)对我来说很适合,最多可以使用200个Google Compute Engine实例,这是我可以开始的。我不确定我的代码具体是什么造成了这个问题 - 任何帮助或提示都将不胜感激。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题 - 似乎这是我使用的大量套接字的问题,也可能是使用的GCE实例的内存限制。有关详细信息,请参阅上面的评论帖子。