4

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

 ╭────────╮                  ╭─────────╮                  ╭─────────╮
 │        ├──> 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示例)可以使用?我不知道该怎么称呼这种设置,所以我的谷歌搜索没有给我很多有用的结果。

任何提示表示赞赏!

4

2 回答 2

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 您也可以拥有持久队列。

于 2013-01-19T13:07:00.763 回答
1

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

于 2013-01-19T12:42:10.110 回答