我正在使用beanstalkc作为beanstalkd应用程序的python包装器。
我想做的是让生产者放一些工作(例如:'a','b','c','d'),消费者可以不断获得工作(例如: 'A', 'b', 'C', 'd', 'A', 'b',...)。
在消费者中,我通过job.reserve()获得了这些工作。我认为解决方案只是在不删除它们的情况下保留作业,但在我运行一些消费者进程后,我得到了一个TIMEOUT ERROR。
我显然做错了什么,但我找不到一种方法来“重新排队”消费者使用的工作。
答案 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)
为什么不呢,当你完成一项特定的工作,并在你发布它之后,将你刚刚完成的同一份工作的另一份副本放回队列中?
否则你会试图让它做一些它不打算做的事情。