2014-07-07 8 views
5

Sto utilizzando Celery 2.5.1 e sto cercando di utilizzare countdown per eseguire l'attività dopo 20 secondi, ma viene eseguita immediatamente.Attività di Celeria con conto alla rovescia

Io lo utilizzo come:

DemoTask.apply_async(countdown = 20) 

mi manca qualcosa qui?

+0

Hai per caso "CELERY_ALWAYS_EAGER = True"? – Banana

+0

No, non lo sono. Ho anche provato a impostare 'CELERY_ALWAYS_EAGER = False' – Siddharth

+0

@Siddharth fa il conto alla rovescia non funziona con' CELERY_ALWAYS_EAGER = True'? Ci si aspetterebbe intuitivamente lo stesso comportamento sia in esecuzione sincrona che asincrona, ma sembra che il conto alla rovescia sia ignorato:/Non riesco a trovare alcuna documentazione affermando questo e leggendo il codice non sembra ovvio. –

risposta

5

Il problema probabilmente non è nel fuso orario giusto come in India. Impostando countdown=20 potresti dire a Celery di eseguire l'operazione 20 secondi dopo 3 ore fa.

Io suggerisco di usare il pytz library per dire Sedano per avviare l'attività al momento giusto:

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

O anche più facile se si utilizza Django (e hanno fissato TIME_ZONE in settings.py):

+0

Aveva un problema simile. Il tempo di risparmio estivo è terminato e all'improvviso i nostri conti alla rovescia sono stati ignorati ... – tschale