使用python和zeromq分配任务

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

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

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

这当然很慢。 最慢的部分发送200次相同的消息。 收集也很慢。 我发现分发任务和收集答案的解决方案确实实现了负载均衡,这不是我所需要的。 我需要每个工作人员收到信息并作出回应。

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

谢谢


我不知道zmq。 以下是可能无法使用的模式,只是为了开始:

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

主PUB绑定*:3140发送

工人SUB连接masterhost:3140 SUBSCRIBE recv

然后收集答案

工作人员PUSH连接masterhost:3141发送

主PULL绑定*:3141 recv

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

master REQ连接workerhost:3142发送recv

工人REP绑定*:3142 recv发送


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

  • http://zguide.zeromq.org/page:all(看看paronoid海盗模式)
  • http://blog.garambrogne.net/post/2010/10/23/simple-python-work-queue-with-zeromq
  • https://github.com/marklit/zeromq-worker-queue
  • 具体实施还取决于您是否需要可靠地处理工作。

    链接地址: http://www.djcxy.com/p/18367.html

    上一篇: Distributing task with python and zeromq

    下一篇: ZeroMQ PUSH/PULL and lost message