我有两个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)和我的两个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()在两个接收器之间,超时时间为1和10000,当我通过管道发送任务时,没有任何变化:两者最终都管理着相同数量的放入管道"tubename"的任务。
关于如何使“接收者1”优先于“接收者2”,有什么想法吗?
发布于 2020-08-07 02:18:39
reserve中的超时是指客户端在无作业返回之前等待的时间。
您可能正在寻找put (with a delay),在这种情况下,作业在队列中至少等待n秒后才会被释放。
每个作业也有一个优先级。如果接收器可以同时看到它们,它将返回任何具有更高优先级(即:更接近0)的作业,而不是具有较低优先级(具有更大数字)的作业。
发布于 2020-08-19 05:41:05
Beanstalkd不区分客户端或接收者的优先级。
https://stackoverflow.com/questions/63283548
复制相似问题