芹菜节拍时间表:芹菜开始时立即运行任务?

tim*_*irg 10 python celery celerybeat

如果我创建一个芹菜节拍时间表,使用timedelta(days=1),第一个任务将在24小时后进行,引用芹菜节拍文件:

使用timedelta进行计划意味着任务将以30秒的间隔发送(第一个任务将在芹菜节拍开始后30秒发送,然后在最后一次运行后每30秒发送一次).

但事实是,在很多情况下,调度程序在启动时运行任务实际上很重要,但是我没有找到允许我在芹菜启动后立即运行任务的选项,我不仔细阅读,或者芹菜错过了这个功能吗?

tim*_*irg 4

我决定我可以声明每个任务的实例,并在 celery 启动时执行它们。我根本不喜欢这个,因为它使启动芹菜的速度非常慢(如果你有 Slow PeriodicTask),但它满足了我的要求。

只需将其添加到以下内容的末尾tasks.py

########### spawn all tasks at launch! ############
localmess = locals().values()
for obj in localmess:
    if isclass(obj):
        if obj is not PeriodicTask and issubclass(obj, PeriodicTask):
            instance = obj()
            logger.info('running {0}'.format(obj))
            try:
                instance.run()
            except:
                logger.warn('task fail: {0}'.format(obj))
                pass

######## all tasks must be decleared above! ########
Run Code Online (Sandbox Code Playgroud)