tim*_*irg 10 python celery celerybeat
如果我创建一个芹菜节拍时间表,使用timedelta(days=1),第一个任务将在24小时后进行,引用芹菜节拍文件:
使用timedelta进行计划意味着任务将以30秒的间隔发送(第一个任务将在芹菜节拍开始后30秒发送,然后在最后一次运行后每30秒发送一次).
但事实是,在很多情况下,调度程序在启动时运行任务实际上很重要,但是我没有找到允许我在芹菜启动后立即运行任务的选项,我不仔细阅读,或者芹菜错过了这个功能吗?
我决定我可以声明每个任务的实例,并在 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)