2012-05-22 2 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

Почему не только, когда вы закончили определенную работу, и после того, как вам 'выпустил его, поместил еще одну копию той же работы, которую вы только что вернули в очередь?

В противном случае вы попытаетесь заставить его сделать то, что он не предназначен для выполнения.