1

私は 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. 次に、24 時間ごとに 5 つのタスクすべてを繰り返すスケジュールが必要です。したがって、ここではパラメーターを渡す方法がわかりません (パラメーターは db に保存されます)。

他の答えで、私はこの構文を見ました:

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 にはなく、引数を動的に渡すことができないことです。

4

1 に答える 1

1

登録する celerybeat タスクはラッパーであり、その内部でプロジェクト/タスク ロジックを実行し、必要に応じて他のタスクを起動することができます。セロリ ビート ジョブ内でプロジェクト タスクを取得できます。

  • CELERYBEAT_SCHEDULE.task->'some_django_app.project_beat_task'

次に、プロジェクト ビート タスクは、正しいプロジェクトとそれらに関連付けられたすべてのタスクを取得し、おそらく各プロジェクトの一連のタスクを生成します。

于 2016-03-03T18:52:30.723 に答える