我已经配置了Django + Celery:一切正常,我可以执行从views.py调用的任务,即mul.apply_async((2, 5), queue='celery', countdown=5)
我需要定期执行任务,将使用从用户传递的参数链接简单任务。
我阅读了文档http://docs.celeryproject.org/en/latest/userguide/canvas.html并知道如何链接,我知道如何在没有参数的情况下进行定期任务@periodic_task(run_every=(crontab(hour="*", minute="*", day_of_week="*")))
但如何结合这个?
我想要的工作流程:
在其他答案中,我看到了这种语法:
CELERYBEAT_SCHEDULE = {
# crontab(hour=0, minute=0, day_of_week='saturday')
'schedule-name': { # example: 'file-backup'
'task': 'some_django_app.tasks....', # example: 'files.tasks.cleanup'
'schedule': crontab(...)
'args': (2, 3)
},
}
但问题是它位于Django的settings.py中但不在tasks.py中,我无法动态传递args。
答案 0 :(得分:1)
您注册的celerybeat任务可以是一个包装器,并在其中执行项目/任务逻辑,并根据需要启动其他任务。您可以在芹菜节拍工作中获取项目任务。
CELERYBEAT_SCHEDULE.task
- > 'some_django_app.project_beat_task'
然后项目节拍任务可以检索正确的项目和与之相关的所有任务,可能会为每个项目产生一系列任务