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?
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?
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
):
Miał podobny problem. Czas letni skończył się i nagle nasze odliczanie zostało zignorowane ... – tschale
Czy przez przypadek masz 'CELERY_ALWAYS_EAGER = True'? – Banana
Nie, nie jestem. Próbowałem również ustawienie 'CELERY_ALWAYS_EAGER = False' – Siddharth
@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. –