Python和ZMQ:REP套接字未接收所有请求
我有一个REP套接字,它连接着很多REQ套接字,每个都在不同的Google Compute Engine实例上运行。我想实现的同步功能在ZMQ指南的syncpub/syncsub示例中有详细介绍,我的代码看起来和那个示例很相似:
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
我自己回答一下这个问题——看起来是我使用的插座(socket)数量太多了,还有可能是我用的GCE实例的内存限制。想了解更多细节可以看看上面的评论。