Задание Celery не выполнено в браузере, но успешно выполнено в python-оболочке Django
Я использую Django, Celery и RabbitMQ для простых задач на Ubuntu, но celery не дает ответа.
Я не могу понять, почему задача ожидает выполнения в браузере, в то время как она выполнена, когда я использовал оболочку, выполнив python3 manage.py shell.
Вот мой файл tasks.py:
from celery import shared_task, task
@shared_task
def createContainer(container_data):
print(container_data,"create")
return "created"
@shared_task
def destroyContainer(container_data):
print(container_data,"destroy")
return "destroyed"
Вот мой файл views.py:
def post(self,request):
if str(request.data["process"]) == "create":
postdata = {
"image_name" : request.data["image_name"],
"image_tag" : request.data["image_tag"],
"owner" : request.user.id
}
# I tried to print the postdata variable before the task and it is working
createContainer.delay(postdata)
elif str(request.data["process"]) == "destroy":
postdata = {
"cont_id" : request.data["cont_id"]
}
# I tried to print the postdata variable before the task and it is working
destroyContainer.delay(postdata)
# I tried to print anything here, but it was not reachable and never executed
Вот код, который я пробовал в оболочке:
>>> from dockerapp.tasks import create_container
>>> create_container.delay("fake data")
>>> <AsyncResult: c37c47f3-6965-4f2e-afcd-01de60f82565>
Кроме того, я могу увидеть журналы celery здесь в другом терминале, выполнив celery -A dockerproj worker -l info
Когда я использовал оболочку, получились такие строки:
Received task: dockerapp.tasks.create_container[c37c47f3-6965-4f2e-afcd-01de60f82565]
fake data #print
create #print
Task dockerapp.tasks.create_container[c37c47f3-6965-4f2e-afcd-01de60f82565] succeeded in 0.003456833990640007s
но он не показывает никаких результатов, когда я использую его с браузером в POST-запросе.
Однако я видел много решений, добавляющих несколько строк в settings.py файл в качестве конфигураций сельдерея
Я попробовал все эти строки:
CELERY_BROKER_URL = 'amqp://127.0.0.1'
CELERY_TIMEZONE = 'UTC'
CELERY_TRACK_STARTED = True
CELERY_TASK_TRACK_STARTED = True
CELERY_CACHE_BACKEND = 'amqp'
CELERY_TASK_TIME_LIMIT = 30 * 60
CELERY_IGNORE_RESULT = False
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']
Я даже попробовал это с помощью терминала celery:
celery -A dockerproj worker -l info -P threads
celery -A dockerproj worker -l info --pool=solo (people said it fixed the issue in windows, however, i tried it)