Обходной путь для приоритета задачи сельдерея на RabbitMQ? - PullRequest
9 голосов
/ 31 июля 2010

Я запускаю Django с Celery поверх RabbitMQ в качестве очереди для обработки некоторых задач обработки данных. Я начинаю работу с сельдереем, когда пользователь впервые регистрируется, а также периодически обновляет свои данные. Тем не менее, я бы хотел отдать приоритет задачам, выполняемым пользователями, которые в данный момент находятся в сети. Я заметил, что для задач в сельдерее был установлен приоритет, но кажется, что rabbitmq не поддерживает это. Этот поток http://groups.google.com/group/celery-users/browse_thread/thread/ac3b6123d63421e5/b7740def1389e87e?lnk=gst&q=priority#b7740def1389e87e предлагает иметь две разные очереди: высокоприоритетную и низкоприоритетную или устанавливать ограничение скорости для задач с более низким приоритетом.

У кого-нибудь есть хороший обходной путь для реализации приоритета? Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 30 марта 2011

Насколько я понимаю, и я еще этого не сделал, 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 [последний]

2 голосов
/ 10 марта 2016

Кроме того, вы можете помещать срочные задачи в некоторую очередь (скажем, срочную очередь) и устанавливать приоритеты потребителей, то есть позволить всем потребителям выбирать задачу из очереди срочных сообщений с высоким приоритетом.

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

На стороне потребителя вы можете определить аргумент x-priority в очередях для получения. В приведенном ниже примере потребитель выбирает задачи из очереди сельдерея с приоритетом 0 и из hipri с приоритетом 10.

Пример:

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}),
)
...