我在RabbitMQ上运行带有Celery的Django作为处理一些数据处理任务的队列。当用户第一次注册时,我正在开始芹菜任务,并定期更新他们的数据。但是,我当然要优先考虑运行当前在线用户的任务。我注意到芹菜中的任务有一个优先级设置,但似乎rabbitmq不支持这个。此线程 http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e建议具有两个不同的队列,一个是高优先级队列,另一个是低优先级队列,或者为较低优先级任务设置速率限制。
有没有人有一个好的解决方法来实现优先级?提前谢谢!
答案 0 :(得分:4)
据我所知,我还没有这样做,Ask在这里介绍:
http://docs.celeryproject.org/en/master/faq.html#does-celery-support-task-priorities [稳定] http://docs.celeryproject.org/en/latest/faq.html#does-celery-support-task-priorities [最新]
答案 1 :(得分:2)
除此之外,您可以将紧急任务推送到某个队列(让我们说紧急队列)并设置消费者优先级,即让所有消费者从具有高优先级的紧急队列中获取任务。
https://github.com/celery/celery/issues/3098
在消费者端,您可以在要使用的队列中定义x-priority参数。在下面的示例中,消费者从优先级为0的芹菜队列和优先级为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}),
)