Задание 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)
Вернуться на верх