Python + ZeroMQ - 在PUSH / PULL模型中正确处理有限数据流

时间:2015-08-14 14:39:46

标签: python zeromq

我正在尝试使用Python和ZMQ实现分布式PUSH / PULL(某种类型的MapReduce)模型,如下所述:http://taotetek.net/2011/02/02/python-multiprocessing-with-zeromq/。在此示例中, result_manager 确切地知道要等待多少消息以及何时向工作人员发送“已完成”状态。

假设我有一个很大但有限的未知长度数据流。在这种情况下,我不知道到底要停在哪里。我试图从呼吸机发送“完成”而不是 result_manager ,但是,当然,工作人员在处理过程中收到它(因为它是一个单独的通道)并立即死亡,因此丢失了大量数据。

否则,如果我使用相同的 work_message 队列发送“FINISHED”状态 - 它被第一个可用的工作者捕获而其他人挂起,那也是预期的。

我应该在这里使用其他型号吗?或者,请您指出一些针对此案例的最佳做法?

1 个答案:

答案 0 :(得分:0)

  

否则,如果我使用相同的work_message队列发送" FINISHED"   状态 - 它被第一个可用的工作者捕获而其他人   挂起,这也是预期的。

您可以轻松解决此问题。

  1. VENTILATOR 发送"FINISH" RESULT_MANAGER PULL socket
  2. RESULT_MANAGER 收到"FINISH"并通过PUB socket向所有工作人员发布此消息。
  3. 所有工作人员"FINISH"上收到SUB sockets消息并自行终止。
  4. 您可以在ZMQ Guide中找到示例代码,如何将 VENTILATOR 发送给 RESULT_MANAGER ,并设计模式。