9

我在 RabbitMQ 上运行带有 Celery 的 Django 作为队列来处理一些数据处理任务。当用户第一次注册时,我会启动 celery 任务,并定期更新他们的数据。但是,我当然想优先考虑运行当前在线用户的任务。我注意到 celery 中的任务有优先级设置,但似乎 rabbitmq 不支持这一点。这个线程http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e建议有两个不同的队列,一个高优先级和一个低优先级,或者设置一个较低优先级任务的速率限制。

有没有人有一个很好的解决方法来实现优先级?提前致谢!

4

2 回答 2

5

据我了解,我还没有这样做,Ask 在这里介绍了这一点:

http://docs.celeryproject.org/en/master/faq.html#does-celery-support-task-priorities [稳定] http://docs.celeryproject.org/en/latest/faq.html#does-芹菜支持任务优先级[最新]

于 2011-03-30T18:51:26.567 回答
2

除此之外,您可以将紧急任务推送到某个队列(比方说紧急队列)并设置消费者优先级,即让所有消费者从具有高优先级的紧急队列中获取任务。

https://github.com/celery/celery/issues/3098

在消费者端,您可以在队列中定义 x-priority 参数以进行消费。在下面的示例中,消费者从优先级为 0 的 celery 队列和优先级为 10 的 hipri 中获取任务。

例子:

CELERY_QUEUES = (
    Queue('celery', Exchange('celery', type='direct'), routing_key='celery',
          consumer_arguments={'x-priority': 0}),
    Queue('hipri', Exchange('hipri', type='direct'), routing_key='hipri',
          consumer_arguments={'x-priority': 10}),
)
于 2016-03-10T19:35:08.767 回答