2013-04-04 17 views
12

W mojej witrynie użytkownicy mogą ZAKTUALIZOWAĆ swój profil (ręczny) za każdym razem, gdy chce, lub automatycznie raz dziennie.selera - zadania, które należy uruchomić w priorytecie

To zadanie jest obecnie dystrybuowane z selerem.

ale mam "problem":

Codziennie w automatycznej aktualizacji, zadanie ułożenie wszystkich użytkowników (+ -6k użytkowników) na kolejki:

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() 

Jeśli ktoś spróbować zrobić ręczna aktualizacja, będą one wprowadzane w kolejce i trwać wiecznie, aby zostać wykonane.

Czy istnieje sposób na ręczne uruchomienie tego ręcznego zadania? Lub wykonać dedykowaną dla każdej oddzielonej kolejki: ręczną i automatyczną?

+0

Możesz ograniczyć liczbę wykonywanych zadań, na przykład w godzinach. Następnie inne zadania ... Przeczytaj ich dokumentację ... – catherine

Odpowiedz

25

Seler nie obsługuje priorytetu zadania. (V3.0)

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

Można rozwiązać ten problem poprzez trasowanie zadań.

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

Przygotuj domyślne i priority_high kolejce.

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

Uruchomienie dwóch demonów.

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

Zadanie trasy.

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

Dla każdego, kto przychodzi do tej odpowiedzi późno (jak ja); ważne jest, aby zauważyć, że dwaj pracownicy do obsługi selera działają na różnych hostach - tj. dwa serwery zużywają się z kolejki priority_high, a jeden serwer zużywa domyślnie – mafrosis

+0

@Satoshi Yoshinaga, czy mogę również uzyskać współbieżność specyficzną dla kolejki przez specyfikację "-c N" param w demonie uruchamiającym polecenia? Potrzebuję jednej z moich kolejek, aby mieć tylko niektórych pracowników, a innych dużo (kolejka zadań ciężkich). –

+1

Teraz możesz również użyć [priorytet wiadomości] (http://docs.celeryproject.org/en/latest/whatsnew-3.0.html#redis-priority-support) – Chemary