2

私のアプリケーションはPeriodicTask、ユーザー定義のスケジュールに従ってオブジェクトを作成します。つまり、PeriodicTask のスケジュールはいつでも変更できます。過去数日間、Celery がこれをサポートする方法を見つけようとして、フラストレーションを感じていました。最終的に、何かをPeriodicTaskit として実行するには、最初に作成し、次に登録する必要があるという問題があります (なぜこれが必要なのかわかりません)。

したがって、動的タスクが機能するためには、

  1. セロリサーバーの起動時にすべてのタスクを登録する
  2. 新規作成時にタスクを登録します。

#1 は、スタートアップ スクリプト (つまり、./manage.py celerybeat が呼び出された後に実行されるスクリプト) を実行することで簡単に解決できるはずです。残念ながら、これを置くのに便利な場所はないと思います。ある場合、スクリプトは次のようになります。

from djcelery.models import PeriodicTask
from celery.registry import tasks
for task in PeriodicTask.objects.filter(name__startswith = 'scheduler.'):
  tasks.register(task)

「スケジューラ」でフィルタリングしています。私のすべての動的タスクの名前がそのように始まるからです。

#2 わからない。私が見た限りの問題は、それがcelery.registry.tasksメモリに保持されていることであり、コーディングの魔法を除けば、実行が開始された後に celerybeat のタスク レジストリにアクセスする方法はありません。

よろしくお願いします。

4

0 に答える 0