2

質問を投稿しました: Djangoで1日1回正確な時刻にコマンドを実行するには?

セロリが最も簡単なオプションであるという答えが得られましたが、セロリに関して別の質問があります。

from celery.schedules import crontab

CELERYBEAT_SCHEDULE = {
    # Executes every Monday morning at 7:30 A.M
    'every-monday-morning': {
        'task': 'tasks.add',
        'schedule': crontab(hour=7, minute=30, day_of_week=1),
        'args': (16, 16),
    },
}

上記のコードに関して 3 つの質問があります。

  • execute_command(User, command)メソッドを実行する必要があります。このメソッドが指定されたスケジュールされた時間に実行されることを望みます。

  • でスケジュールを変更したい場合はどうすればよい7:30 AM but every weekdaysですか?.

  • はどうですかargs。私の場合、User and commandfromの値を渡す必要がありますargstaskまたは、単にキーから渡すことができますか?

セロリのドキュメントを読んだだけですが、答えがありませんでした。助けてくれませんか?

4

1 に答える 1

4

Celery の定期的なタスクのドキュメントは見つかりましたか?

  • スケジューラ エントリを登録するには、メソッドの識別子を使用する必要があります。execute_commandタスクが という名前のモジュールにある場合、構造体foobartask値は になります。CELERYBEAT_SCHEDULEfoobar.execute_command

    Celery は、それが機能する場合、タスクをインポートしますimport foobar.execute_command

  • celery.schedule.crontabAPI を確認してください。以下は、平日の午前 7 時 30 分に実行する必要があります。

    crontab(minute=30, hour=7, day_of_week=’mon-fri’)
    
  • このタスクは非同期で実行されることに注意してください。このタスクをスケジュールし、タスクが呼び出されたときにデータベース オブジェクトがまだそこにあることを期待しているときに、データベース オブジェクトを照会することはできません。

    したがって、定数のままの python 値のみを渡し、タスクをデータベースに接続して、渡した引数に基づいて物事を検索する必要があります。

    このタスクが特定の 1 人のユーザーに対してのみタスクを実行する場合は、必ずそのユーザーの識別子 (ユーザー ID、電子メール、データベースからユーザーを検索するために使用できるもの) を渡します。

于 2012-08-12T20:22:10.657 に答える