1

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

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

在消费者中,我使用 job.reserve() 获得工作。我认为解决方案只是保留作业而不删除它们,但是在我运行了一些消费者进程之后,我得到了一个超时错误。

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

4

2 回答 2

2

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

生产商:

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

消费者:

job = queue.reserve()
do something with job
new_priority = job.stats()['pri'] + 1
job.release(priority=new_priority)
于 2012-05-22T18:33:40.860 回答
0

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

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

于 2012-05-22T21:47:07.050 回答