Python中的链接工作池

时间:2013-01-19 12:35:56

标签: python queue multiprocessing threadpool

我正在尝试设置一个链接工作池系统​​,如下所示:

 ╭────────╮                  ╭─────────╮                  ╭─────────╮
 │        ├──> Worker 1 ───> │         ├──> Worker 3 ───> │         │
 │  Data  ├──> Worker 1 ───> │  Queue  ├──> Worker 3 ───> │  Queue  ├───> Output
 │        ├──> Worker 1 ───> │         ├──> Worker 3 ───> │         │
 ╰────────╯                  ╰─────────╯                  ╰─────────╯ 
 ╭────────╮                     ^ ^ ^
 │        ├──> Worker 2 ────────┘ │ │
 │  Data  ├──> Worker 2 ──────────┘ │
 │        ├──> Worker 2 ────────────┘
 ╰────────╯                         

在推出自己的通用解决方案之前,我可以使用任何现有的库(或干净的multiprocessing / threading示例)吗?我不确定将这种设置称为什么,所以我的谷歌搜索没有给我很多有用的结果。

任何提示都表示赞赏!

2 个答案:

答案 0 :(得分:1)

ZeroMQ是一种轻量级解决方案,具有Python绑定功能。 http://www.zeromq.org/bindings:python

答案 1 :(得分:1)

我看过Beanstalkd之前很高兴处理工作队列,多处理器是生产者和/或消费者,节省了担心线程。

beanstalkc

上有一个Python客户端

从他们的wiki中获取的示例。

>>> import beanstalkc
>>> beanstalk = beanstalkc.Connection(host='localhost', port=14711)
>>> beanstalk.put('hey!')
1
>>> job = beanstalk.reserve()
>>> job.body
'hey!'
>>> job.delete()

这可能满足您的需求 - IIRC您也可以拥有持久的队列。