Django + Celery:如何将带有参数的任务链接到周期性任务

时间:2016-03-03 18:47:05

标签: python django celery crontab 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="*")))

但如何结合这个?

我想要的工作流程:

  1. 用户使用参数创建项目。使用该参数执行了5个任务。
  2. 然后我需要shedule每24小时重复所有5个任务。所以在这里我不知道如何传递参数(它们保存到db)。
  3. 在其他答案中,我看到了这种语法:

    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。

1 个答案:

答案 0 :(得分:1)

您注册的celerybeat任务可以是一个包装器,并在其中执行项目/任务逻辑,并根据需要启动其他任务。您可以在芹菜节拍工作中获取项目任务。

  • CELERYBEAT_SCHEDULE.task - > 'some_django_app.project_beat_task'

然后项目节拍任务可以检索正确的项目和与之相关的所有任务,可能会为每个项目产生一系列任务