Планировщик Celery не выполняет задание
Я пытался использовать Celery для регулярного запроса внешнего api и обновления базы данных в моем Django проекте новыми данными. Celery правильно планирует задачу и отправляет ее на celery worker, но она никогда ничего не выполняет.
Вот мой файл celery.py, который находится на том же уровне, что и мой settings.py:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.conf import settings
from celery.schedules import crontab
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "data_analysis.settings")
app = Celery("data_analysis")
app.conf.enable_utc = False
app.conf.update(timezone= 'Asia/Kolkata')
app.config_from_object(settings, namespace="CELERY")
app.autodiscover_tasks()
app.conf.beat_schedule = {
'update_all_api':{
'task':'operations.tasks.celery_update',
'schedule': 30.0,
}
}
@app.task(bind=True)
def debug_task(self):
print(f'Request: {self.request!r}')
Вот мой tasks.py, который находится внутри приложения под названием 'operations':
from celery import shared_task
import time
from operations.models import Machine, MachineData
from operations.analytics.processing import get_data
@shared_task(bind=True)
def celery_update(self):
print('Running Update')
print('The time is :' + str(time.asctime(time.localtime(time.time()))))
print('Getting Data ...')
all_machines = Machine.objects.all()
for machine in all_machines:
data_list = get_data(machine.api_url)
for data in data_list:
# print(data)
if not MachineData.objects.filter(data=data):
print('New Data received for :' + str(machine))
MachineData.objects.create(machine=machine, data=data)
else:
print('No new data for : ' + str(machine))
return 'done'
Планировщик отправляет задание на celery worker, но он никогда не выполняет функцию.
Вот скриншот настроек и структуры каталогов и терминала. settings
Если кто-то может указать на мою ошибку, это будет очень полезно.
В дополнение к запуску celery beat для производства задач, Вы должны запустить celery worker следующим образом:
celery -A data_analysis worker -l info
celery beat производит задание, а затем, celery worker выполнит его.