我正在使用Celery 2.5.1,我试图countdown在20秒后运行任务,但它会立即执行.
我用它作为:
DemoTask.apply_async(countdown = 20)
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
问题很可能不像你在印度那样在正确的时区.设置countdown=20你可能会告诉Celery在3小时前20秒执行任务.
我建议使用pytz库告诉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))
Run Code Online (Sandbox Code Playgroud)
或者,即使你使用Django(并且已经设置了更容易TIME_ZONE的settings.py):
from datetime import timedelta
from django.utils.timezone import now
DemoTask.apply_async(eta=now() + timedelta(seconds=20))
Run Code Online (Sandbox Code Playgroud)