2012-05-22 167 views
1

我正在使用beanstalkc python包裝beanstalkd應用程序。beanstalkd上的循環隊列

我想要做的是讓製片人做一些工作(例如:'a','b','c','d')一次,並且消費者可以連續獲得工作。 :a,b,c,d,a,b,...)。

在消費者中,我用job.reserve()獲得了工作。我認爲解決方案只是保留作業而不刪除它們,但是在運行一些消費者流程後,我得到了TIMEOUT ERROR。

我明顯在做錯事,但我找不到一種方法來重新排列消費者使用的工作。

回答

2

我認爲這可能是一個解決方案:

生產

消費者
queue.put('a', priority=0) 

爲什麼不乾脆,當你完成某項工作,以後你
job = queue.reserve() 
do something with job 
new_priority = job.stats()['pri'] + 1 
job.release(priority=new_priority) 
+0

是的,這是我正在考慮的事情。但是,如何阻止經常性工作再次運行。假設我必須每10分鐘計算一次數字,但用戶決定離開。你將如何從隊列中刪除工作? – WarmWaffles

0

已經發布了它,把你剛剛完成的同一份工作的另一份拷貝放回隊列中?

否則,你會試圖讓它去做一些它沒有設計的事情。