У меня 2 beanstalkc
приемника смотрят одну и ту же трубку "tubename"
.
Я бы хотел, чтобы один beanstalkc
приемник имел приоритет над другим. Чтобы достичь этого, я хотел бы сказать получателю с самым низким приоритетом beanstalkc
, чтобы он дождался, пока задача не будет старше X секунд, прежде чем резервировать их.
Я нашел "reserve-with-timeout"
, но Я не совсем понимаю это, и мне не удалось заставить его успешно работать для моего варианта использования.
class MyBeanstalkReceiver():
def __init__(self, host=beanstalkc.DEFAULT_HOST, port=beanstalkc.DEFAULT_PORT,
tube="default", timeout=1):
self.tube = tube
self.host = host
self.port = port
self.timeout = timeout
def run(self):
while True:
self.run_once()
def run_once(self):
job = self._get_task()
try:
body = job.body
data = json.loads(body)
self.job(data)
except Exception as e:
job.delete()
def job(self, data):
print(data)
def beanstalk(self):
beanstalk = beanstalkc.Connection(host=self.host, port=self.port)
beanstalk.use(self.tube)
beanstalk.watch(self.tube)
return beanstalk
def _get_task(self):
return self.beanstalk().reserve(self.timeout)
И мои 2 beanstalkc
приемники:
# receiver 1
w = MyBeanstalkReceiver(hosts=["localhost:14711"], tube="tubename", timeout=1)
w.run()
# receiver 2
w = MyBeanstalkReceiver(hosts=["localhost:14711"], tube="tubename", timeout=10000)
w.run()
Между 2 приемника, с таймаутом 1 и 10000, ничего не меняется, когда я отправляю задачи по трубке: оба в конечном итоге управляют одинаковым количеством задач, помещенных в трубку "tubename"
.
Любая идея о том, как действовать сделать "получатель 1" приоритетнее "получателя 2"?