Python zeromq管道模式

时间:2015-10-02 17:53:20

标签: python zeromq

我正在尝试使用Python和ZeroMQ实现流水线模式,因此我创建了三个组件:producerconsumermerger

所以,我能够发送我的任务,消耗(计算一个数字的平方),然后得到我的结果。

我的问题是,如果我有一个我打算作为批处理提交的任务列表,我希望它们在分布式资源池中完成并合并结果,类似于多处理应用/ apply_async。

在原生python中,我通常使用

    ...

    def f(n):
      return n*n

    ...
    _r=[]
    for i in xrange(1000): 
      _r.append(pool.apply_async(f,(i,)))
    ...
    #get results
    results = [ r.get() for r in _r ]

我试图将其模仿为zeromq模式

我的 producer consumer results 以{{3为基础}}。我还计划将多个服务器作为消费者,因为它是一个长期运行的任务,因此我研究了负载平衡模式和令人生畏的example。零mq是否必要?

1 个答案:

答案 0 :(得分:0)

...原帖已经改变了问题的措辞(不包括PARALLEL处理的初始请求)并且已经改变了目标。

这个答案开始了< strong>在这些更新之前,当O / P包含问题时 。 。 。我怎么知道我的第一批批次结果已准备就绪?

我怎么知道我的第一个...是更容易的部分:

处理渠道的 result_collector 结尾可以 .poll() PULL 接收器与 zmq.Poller 实例相关联,以便测试是否存在 zmq.POLLIN 事件的第一次出现。

或者,可能会弄脏手并处理相同的PULL - 引擎&#34;嗅探&#34;通过类似构造的 try: .recv( ..., zmq.NOBLOCK ) except ZMQError: #noMsgYetHandler

平行?如果您确实需要PARALLEL ......那很难

近十年来,许多文本使用平行词。仍然存在非常有限的情况,其中可以执行真正的 PARALLEL 代码。

This post may help for a fast disambiguation和另一个链接将有助于严格区分案例on what conditions a true PARALLEL software system design has to be implemented.

如果您的项目符合 true PARALLEL 系统的 [ 1.Definition ] ,您的ZeroMQ工作也必须提供用于并行系统执行的强大,最小延迟信令和超低延迟控制平面设施(无可置疑,但您的项目人员*天消耗和放大器;专有技术+ QM / QA要求已经扩大到几个数量级的大投资/ V @ R规模)

CONCURRENT解决方案恰到好处?

如果 CONCURRENT 系统操作设计足够(无论是阻止允许还是高级自上而下的非阻塞系统架构设计),您将拥有许多直接的ZeroMQ工具用于设计智能服务,循环或优先级队列标记(因此btw固有非并行,只是并发)负载平衡器以及此 下的许多便捷的即用型功能&#34;放松&#34; 系统设计范例。