我正在使用Celery 2.5.1,我试图在20秒后使用countdown
来运行任务,但它会立即执行。
我用它作为:
DemoTask.apply_async(countdown = 20)
我在这里错过了什么吗?
答案 0 :(得分:8)
问题很可能不像你在印度那样在正确的时区。通过设置countdown=20
,您可能会告诉Celery在3小时前20秒执行任务。
我建议使用pytz library告诉Celery在合适的时间开始任务:
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))
如果您使用Django(并在TIME_ZONE
中设置settings.py
),甚至更容易:
from datetime import timedelta
from django.utils.timezone import now
DemoTask.apply_async(eta=now() + timedelta(seconds=20))
答案 1 :(得分:0)
除了the timezone problem laid out by @Banana之外,请确保将芹菜跳过的the celery configuration option always_eager
设置为False
- 否则,Celery会忽略倒计时和 eta