Сельдерей. Задачи, которые должны выполняться в приоритетном порядке.
На моем сайте пользователи могут ОБНОВИТЬ их профиль (руководство) каждый раз, когда он захочет, или автоматически один раз в день.
Эта задача теперь распространяется с сельдереем.
Но у меня есть "проблема":
Каждый день, в автоматическом обновлении, задание помещает ВСЕ пользователей (+ -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')