芹菜任务与倒计时

Sid*_*rth 5 python celery

我正在使用Celery 2.5.1,我试图countdown在20秒后运行任务,但它会立即执行.

我用它作为:

DemoTask.apply_async(countdown = 20)
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

Ban*_*ana 8

问题很可能不像你在印度那样在正确的时区.设置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_ZONEsettings.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)

  • 感谢您分享这个。评论以验证这是否有效。 (2认同)

phi*_*hag 6

此外,对于@Banana 提出的时区问题,请确保celery 配置选项always_eager(使 celery 跳过)设置为False- 否则,Celery 会忽略倒计时eta。