Celery KeyError: 'myproject.tasks.async_task'
Когда я пытаюсь запустить фоновую задачу celery, она выдает ошибку: KeyError: 'myproject.tasks.async_task'
Я использую python version: 3.8.10
, django verion: 4.1.2
, celery version: 5.2.7
и rabbitmq version: 3.8.2
ниже приведен скриншот структуры моего проекта:
ниже приведен мой код для фоновой задачи:
settings.py:
CELERY_BROKER_URL = 'amqp://localhost:5672'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
myproject/init.py:
from __future__ import absolute_import, unicode_literals
from myproject.celery import app as celery_app
__all__ = ['celery_app']
celery.py
from __future__ import absolute_import
import os, sys
from celery import Celery
import django
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
tasks.py:
from __future__ import absolute_import
from celery import shared_task
from time import sleep
import os
@shared_task
def sleepy(duration):
sleep(duration)
return None
@shared_task
def async_task(save_path, name_of_file):
sleep(30)
completeName = os.path.join(save_path, name_of_file+".html")
file1 = open(completeName, "w")
toFile = 'test data'
file1.write(toFile)
file1.close()
return 'task complete'
views.py
def add_product(request):
if request.method == 'POST':
id_col_data = request.POST.getlist('services')
target_col = request.POST.get('target_col')
file_name = request.POST.get('file_name')
amz_columns_dict = {'id_col': id_col_data,
'target_col': target_col,
'wt_col': None}
import os.path
save_path = '/home/satyajit/Desktop/'
if os.path.exists(save_path):
try:
from myproject.tasks import async_task
name_of_file = file_name
status = async_task.delay(save_path, name_of_file) #celery task
print('status---->', status)
except Exception as e:
print('task error is ------>', e)
return render(request,'data/error.html', {'message': 'async task error'})
else:
print('error occured')
return HttpResponse('product added successfully')
return render(request, 'add_product.html')
Когда я запускаю эту команду celery celery -A myproject worker -l info
для проверки работы процесса celery, я получаю следующий трекбек.
Полная информация о трекбеке представлена на скриншоте ниже: