首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何告诉beanstalkc接收器在保留任务前等待X秒?

如何告诉beanstalkc接收器在保留任务前等待X秒?
EN

Stack Overflow用户
提问于 2020-08-06 20:23:08
回答 2查看 28关注 0票数 0

我有两个beanstalkc接收器在看同一个"tubename"管。

我希望一个beanstalkc接收器优先于另一个接收器。为了实现这一点,我想告诉最低优先级的beanstalkc接收器在保留它们之前等待X秒的任务。

我发现了"reserve-with-timeout",但我既没有真正理解它,也没有设法让它在我的用例中成功地工作。

代码语言:javascript
复制
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接收器:

代码语言:javascript
复制
# receiver 1
w = MyBeanstalkReceiver(hosts=["localhost:14711"], tube="tubename", timeout=1)
w.run()
代码语言:javascript
复制
# receiver 2
w = MyBeanstalkReceiver(hosts=["localhost:14711"], tube="tubename", timeout=10000)
w.run()

在两个接收器之间,超时时间为1和10000,当我通过管道发送任务时,没有任何变化:两者最终都管理着相同数量的放入管道"tubename"的任务。

关于如何使“接收者1”优先于“接收者2”,有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-07 02:18:39

reserve中的超时是指客户端在无作业返回之前等待的时间。

您可能正在寻找put (with a delay),在这种情况下,作业在队列中至少等待n秒后才会被释放。

每个作业也有一个优先级。如果接收器可以同时看到它们,它将返回任何具有更高优先级(即:更接近0)的作业,而不是具有较低优先级(具有更大数字)的作业。

票数 0
EN

Stack Overflow用户

发布于 2020-08-19 05:41:05

Beanstalkd不区分客户端或接收者的优先级。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63283548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档