我有 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”的任何想法?