【问题标题】:Implementing "idle" and "normal" priority queues for long-running tasks in Celery在 Celery 中为长时间运行的任务实现“空闲”和“正常”优先级队列
【发布时间】:2011-11-19 05:06:00
【问题描述】:

我正在尝试使用 Celery 实现以下场景:两个(相同)长时间运行的任务队列,一个用于“正常”,另一个用于“空闲”优先级。

我会让工作人员监控两个队列并首先从“正常”优先级队列中获取任务,如果它为空,它将从“空闲”优先级中获​​取任务。

我的问题是:是否可以保证工作人员检查任务队列的顺序?另外,这是实施优先事项的正确方法吗?

背景:任务正在运行 ffmpeg 转码作业。 “正常”优先级是新视频进来(必须尽快转码),“空闲”优先级是将旧(40.000+ 视频)存档重新转码为更新格式设置的任务。我没有多台服务器可用于进行多服务器任务分派。

【问题讨论】:

    标签: django rabbitmq celery django-celery


    【解决方案1】:

    【讨论】:

    • 这些都没有帮助。我已经知道 RabbitMQ 不支持优先级,这就是我要解决的原因。
    【解决方案2】:

    在空闲worker不会消耗太多系统资源的理论下,我已经实现了两个优先级,即第二个交换、第二组队列和第二组worker。我没有如此密集的工作流程,所以当第一组工作人员处于活动状态时,我不会让我的第二组工作人员自我节流,但 UNIX renice 命令可能会为此工作。

    您可能还可以对控制队列做一些事情,这样工人接收工作请求是不够的,他们还需要从控制队列中获取令牌。然后你向空闲控制队列吐出少量令牌,向正常控制队列吐出大量令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-10
      • 2019-08-12
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多