【问题标题】:How to pull from a different queue inside Celery task如何从 Celery 任务中的不同队列中拉出
【发布时间】:2018-11-29 06:52:43
【问题描述】:

我有一个任务队列,队列 A,和一个资源队列,队列 B。在程序启动时,队列 B 中放入了有限数量的资源。如果任务能够从队列中提取资源,则它们可以执行B,一旦他们完成执行,他们必须将资源放回队列 B。

使用 Celery,有没有办法从任务中的不同队列中提取来完成此任务?或者这需要完全不同的架构吗?

虽然可能会降低并发性,但另一种方法是在将任务放入任务队列之前将其与资源配对,然后轮询任务以完成,并在完成时释放该资源并将其放回任务队列一个不同的任务。这是标准解决方案吗?

【问题讨论】:

    标签: python architecture rabbitmq celery eventlet


    【解决方案1】:

    我最终决定的架构在 Celery 中的 chain 原语的帮助下实现了这一点,而不会损失并发性。

    为确保没有两个任务同时使用相同的资源,您可以在将任务添加到队列之前将所有任务分配到可用资源中(假设您有 10 个任务和 3 个资源,只需将 3 个任务分配给两个的资源,4 到第三个资源)。然后,对于每个资源,使用chain() 调用任务,这会告诉 Celery 依次执行该资源的每个任务。

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 1970-01-01
      • 2020-05-20
      • 2020-12-16
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      相关资源
      最近更新 更多