繁体   English   中英

使用python和zeromq分发任务

[英]Distributing task with python and zeromq

我有一个使用python和zeromq的工作应用程序,我想优化它。

简而言之,主节点向所有工作人员(大约200)发送相同的请求,然后收集答案。 根据答案,它将消息发送回一个节点,然后节点回复。

现在我实现了一个非常简单的模式。 每个worker都有一个REP套接字,服务器有一个REQ套接字列表。 服务器遍历发送一般消息的所有套接字,然后遍历所有套接字以收集答案。 最后,根据答案,服务器选择一个工作人员,向其发送消息并等待回复。

当然,这很慢。 最慢的部分是发送相同消息的200倍。 收集也很慢。 我发现分发任务和收集答案的解决方案会产生负载平衡,这不是我需要的。 我需要每个工人收到消息并做出回应。

这种情况推荐的模式是什么?

谢谢

如果每个工人都需要一份不同的工作,Pub / sub就不会工作。 那么你需要的是一个工作池实现。 要么以循环方式推出作业(只需使用绑定在服务器上的推送套接字并让每个客户端从中拉出,zeromq将执行循环),或者让每个工作人员从服务器请求作业,如果工作至少是一些最小的复杂性,工作之间的差异很大,这是一种更好的方法。 zeromq指南在其主页和网络上有很多例子:

具体实施还取决于您是否需要可靠地处理作业。

我不知道zmq。 这是一个可能不起作用的模式,只是为了开始:

主节点向所有工作人员发送相同的请求(约200)

掌握PUB绑定*:3140发送

worker SUB连接masterhost:3140 SUBSCRIBE recv

然后收集答案

worker PUSH连接masterhost:3141发送

掌握PULL绑定*:3141 recv

根据答案,它将消息发送回一个节点,然后节点回复。

主REQ连接workerhost:3142发送recv

worker REP bind *:3142 recv send

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM