我正在尝试使用Python和ZMQ实现分布式PUSH / PULL(某种类型的MapReduce)模型,如下所述:http://taotetek.net/2011/02/02/python-multiprocessing-with-zeromq/。在此示例中, result_manager 确切地知道要等待多少消息以及何时向工作人员发送“已完成”状态。
假设我有一个很大但有限的未知长度数据流。在这种情况下,我不知道到底要停在哪里。我试图从呼吸机发送“完成”而不是 result_manager ,但是,当然,工作人员在处理过程中收到它(因为它是一个单独的通道)并立即死亡,因此丢失了大量数据。
否则,如果我使用相同的 work_message 队列发送“FINISHED”状态 - 它被第一个可用的工作者捕获而其他人挂起,那也是预期的。
我应该在这里使用其他型号吗?或者,请您指出一些针对此案例的最佳做法?
答案 0 :(得分:0)
否则,如果我使用相同的work_message队列发送" FINISHED" 状态 - 它被第一个可用的工作者捕获而其他人 挂起,这也是预期的。
您可以轻松解决此问题。
"FINISH"
到 RESULT_MANAGER PULL socket
。"FINISH"
并通过PUB socket
向所有工作人员发布此消息。"FINISH"
上收到SUB sockets
消息并自行终止。您可以在ZMQ Guide中找到示例代码,如何将 VENTILATOR 发送给 RESULT_MANAGER ,并设计模式。