Django + Celery:如何将带参数的任务链接到周期性任务
Django + Celery: how to chain tasks with parameters to periodic task
我已经配置了 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="*")))
但是如何结合呢?
我想要的工作流程:
- 用户使用参数创建项目。使用该参数执行了 5 个任务。
- 然后我需要安排每 24 小时重复所有 5 个任务。所以在这里我不知道如何传递参数(它们保存到数据库)。
在其他答案中我看到了这个语法:
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 中,我无法动态传递参数。
您注册的 celerybeat 任务可以是包装器并在其中执行 project/task 逻辑,并根据需要触发其他任务。您可以在 celery beat 作业中获取项目任务。
CELERYBEAT_SCHEDULE.task
-> 'some_django_app.project_beat_task'
然后项目节拍任务可以检索正确的项目和所有与之关联的任务,可能会为每个项目生成一系列任务
我已经配置了 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="*")))
但是如何结合呢?
我想要的工作流程:
- 用户使用参数创建项目。使用该参数执行了 5 个任务。
- 然后我需要安排每 24 小时重复所有 5 个任务。所以在这里我不知道如何传递参数(它们保存到数据库)。
在其他答案中我看到了这个语法:
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 中,我无法动态传递参数。
您注册的 celerybeat 任务可以是包装器并在其中执行 project/task 逻辑,并根据需要触发其他任务。您可以在 celery beat 作业中获取项目任务。
CELERYBEAT_SCHEDULE.task
->'some_django_app.project_beat_task'
然后项目节拍任务可以检索正确的项目和所有与之关联的任务,可能会为每个项目生成一系列任务