beanstalkd上的循环队列

时间:2012-05-22 14:00:01

标签: beanstalkd

我正在使用beanstalkc作为beanstalkd应用程序的python包装器。

我想做的是让生产者放一些工作(例如:'a','b','c','d'),消费者可以不断获得工作(例如: 'A', 'b', 'C', 'd', 'A', 'b',...)。

在消费者中,我通过job.reserve()获得了这些工作。我认为解决方案只是在不删除它们的情况下保留作业,但在我运行一些消费者进程后,我得到了一个TIMEOUT ERROR。

我显然做错了什么,但我找不到一种方法来“重新排队”消费者使用的工作。

2 个答案:

答案 0 :(得分:2)

我认为这可能是一个解决方案:

生产者:

queue.put('a', priority=0)

消费者:

job = queue.reserve()
do something with job
new_priority = job.stats()['pri'] + 1
job.release(priority=new_priority)

答案 1 :(得分:0)

为什么不呢,当你完成一项特定的工作,并在你发布它之后,将你刚刚完成的同一份工作的另一份副本放回队列中?

否则你会试图让它做一些它不打算做的事情。