私は他のAPIのリストを返すAPIを持っています。他のセロリのタスクを実行しているセロリの定期タスク
これらのAPIに15分おきにアクセスし、データをデータベースに戻す必要があります。
以下は、セロリとredisを使ってcelery_worker.pyファイルに書いたものです。しかし、すべてのタスクが開始されません。
list_of_APIs = requests.get(the_api_that_returns_list_of_APIs).json()
CELERYBEAT_SCHEDULE = {
'every-15-minute': {
'task': 'fetch_data_of_all_APIs',
'schedule': timedelta(minutes=15),
},
}
@celery.task
def access_one_API(one_API):
return requests.get(one_API).json()
@celery.task(name='fetch_data_of_all_APIs')
def fetch_data_of_all_APIs():
for one_API in list_of_APIs:
task = access_one_API.delay(one_API)
# some codes to put all task.id into a list_of_task_id
for task_id in list_of_task_id:
# some codes to get the results of all tasks
# some codes to put all the results into a database
fetch_data_of_all_APIs
機能は、セロリサーバが正常にターミナルで起動しますが、どちらもfetch_data_of_all_APIs
もaccess_one_API
開始
にaccess_one_API
機能を実行するために、複数の労働者を使用することになって15分ごとに実行する必要があります。
fetch_data_of_all_APIs
関数内のコードを引き出すと、access_one_API
が起動し、複数のセラーワーカーによって実行されます。しかし、これらのコードを関数内に入れて@celery.task
で装飾するとすぐに、両方の関数が起動しません。
私はそれがセロリと関係があると信じています。
事前に感謝します。
'@ celery.task()'デコレータが必要であることに注意してください。また、現在のセロリのバージョンでは小文字の設定が使われているので、 'celery-beat'設定パラメータをチェックする必要があります。 –