2014-07-07 14 views
5

Używam Selera 2.5.1 i próbuję użyć countdown, aby uruchomić zadanie po 20 sekundach, ale natychmiast zostanie wykonane.Zadanie selera z odliczaniem

używam go jako:

DemoTask.apply_async(countdown = 20) 

jestem brakuje czegoś tutaj?

+0

Czy przez przypadek masz 'CELERY_ALWAYS_EAGER = True'? – Banana

+0

Nie, nie jestem. Próbowałem również ustawienie 'CELERY_ALWAYS_EAGER = False' – Siddharth

+0

@Siddharth robi odliczanie nie działa z' CELERY_ALWAYS_EAGER = True'? Intuicyjnie spodziewałbyś się tego samego zachowania, niezależnie od tego, czy działa synchronicznie czy asynchronicznie, ale wygląda na to, że odliczanie jest ignorowane:/Nie mogę znaleźć żadnej dokumentacji stwierdzającej to i odczytanie kodu nie wydaje się oczywiste. –

Odpowiedz

5

Problem prawdopodobnie nie jest we właściwej strefie czasowej, tak jak w Indiach. Ustawiając countdown=20 możesz kazać Celery wykonać zadanie 20 sekund po 3 godzinach.

Proponuję pomocą pytz library powiedzieć Seler rozpoczęcia zadania w czasie prawej:

from datetime import datetime, timedelta 
from pytz import timezone 

# Set timezone: http://en.wikipedia.org/wiki/List_of_tz_zones_by_name 
my_tz = timezone('US/Eastern') 

DemoTask.apply_async(eta=my_tz.localize(datetime.now()) + timedelta(seconds=20)) 

Albo nawet łatwiejsze, jeśli używasz Django (i ustawieniu TIME_ZONE w settings.py):

+0

Miał podobny problem. Czas letni skończył się i nagle nasze odliczanie zostało zignorowane ... – tschale

Powiązane problemy