検索

ホームページ  >  に質問  >  本文

Python - セロリビートスケジューラの実行中にタスクを動的に追加するにはどうすればよいですか?

django-celery-beat を試してみました。管理バックグラウンドでタスクを追加すると、動的にタスクを追加できます。
ただし、有効になるのは celery Beat を再起動した後です。他に試す方法はありますか?

某草草某草草2745日前2176

全員に返信(2)返信します

  • 为情所困

    为情所困2017-05-18 10:58:10

    動的に追加することはできません。ビートを再起動する必要があります。

    質問に理由 #3493 が答えられました

    返事
    0
  • 高洛峰

    高洛峰2017-05-18 10:58:10

    検討できるアイデアがあり、現在この方法を試しており、石を感じながら川を渡ろうとしている段階です。 Celery はスケジュールされたタスクをサポートしていますが、Linux で crontab のようなスケジュールされたタスクを動的に追加する必要があるため、実装には参考にならないことがわかりました。ドキュメントを読んで情報を探した結果、Celery の apply_async 関数は非常に便利です。その単純な使用方法はカウントダウンですが、eta の威力は非常に大きいです。たとえば、2017-05-02 20:0:0 に実行されるタスクを指定すると、次のように使用できます。

    job.apply_async(args=args, kwarg=kwargs, eta=datetime(2017,5,2,20,0,0))

    これはめったに使用されませんか? 毎晩 8 時に実行する必要があるタスクがある場合、この eta パラメーターを使用してそれを達成できます。疑似コードは次のとおりです:

    リーリー

    ここで非常に重要な点は、タスクが正常に実行されたときの次回の実行時間を計算する方法です。その方法は次のとおりです。 リーリー

    これに基づいて書き直すだけで済みます。具体的には、さまざまな方法があります。

    返事
    0
  • キャンセル返事