Сельдерей. Задачи, которые должны выполняться в приоритетном порядке.

На моем сайте пользователи могут ОБНОВИТЬ их профиль (руководство) каждый раз, когда он захочет, или автоматически один раз в день.

Эта задача теперь распространяется с сельдереем.

Но у меня есть "проблема":

Каждый день, в автоматическом обновлении, задание помещает ВСЕ пользователей (+ -6k пользователей) в очередь:

from celery import group
from tasks import *
import datetime
from lastActivityDate.models import UserActivity

today   = datetime.datetime.today()
one_day = datetime.timedelta(days=5)
today -= one_day

print datetime.datetime.today()

user_list = UserActivity.objects.filter(last_activity_date__gte=today)
g = group(update_user_profile.s(i.user.auth.username) for i in user_list)

print datetime.datetime.today()
print g(user_list.count()).get()

Если кто-то попытается выполнить обновление вручную, они будут входить в очередь te и продолжать работу навсегда.

Есть ли способ установить, чтобы эта ручная задача выполнялась по-разному? Или сделать выделенную для каждой отдельной очереди: ручную и автоматическую?

Ответ 1

Сельдерей не поддерживает приоритет задачи. (V3.0)

http://docs.celeryproject.org/en/master/faq.html#does-celery-support-task-priorities

Вы можете решить эту проблему, выполнив задачи маршрутизации.

http://docs.celeryproject.org/en/latest/userguide/routing.html

Подготовьте очередь по умолчанию и priority_high.

CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = (
    Queue('default'),
    Queue('priority_high'),
)

Запустите два демона.

[email protected]:/$ celery worker -Q priority_high
[email protected]:/$ celery worker -Q default,priority_high

И задача маршрута.

your_task.apply_async(args=['...'], queue='priority_high')