У меня есть API, который возвращает список других API.Периодическая задача сельдерея, выполняющая другие задачи сельдерея, не работает
Мне нужно получить доступ к этим API каждые 15 минут и поместить данные, возвращенные в базу данных.
Ниже приведено то, что я написал в файле celery_worker.py, используя сельдерей и redis. Но все задачи не начинаются.
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
функция должна работать каждые 15 минут, которые предполагается использовать несколько рабочих, чтобы запустить функцию access_one_API
Сервер сельдерей начинается в терминале успешно, но ни fetch_data_of_all_APIs
ни access_one_API
начинается.
Если я вытаскиваю коды в пределах функции fetch_data_of_all_APIs
, то access_one_API
может запускаться и выполняться несколькими работниками сельдерея. Но как только я помещаю эти коды в функцию и украшаю ее @celery.task
, тогда обе функции не запускаются.
Поэтому я считаю, что это должно иметь какое-то отношение к сельдерею.
Большое спасибо заранее.
Обратите внимание, что вам требуется '@ celery.task()' decorator. Кроме того, вам нужно проверить параметры конфигурации «celery-beat», так как в текущей версии сельдерея используются настройки с нижним регистром. –