Celery app.delay() продолжает ждать ответа, не работает

Я пытаюсь экспериментировать с celery с брокером Redis в моем Django приложении, но у меня возникают трудности с его написанием, может ли кто-нибудь указать мне, где я что-то упускаю

my init.py

from __future__ import absolute_import
from .celery import app as celery_app

__all__ = ('celery_app', )

my base_settings.py

CELERY_BROKER_URL = 'redis://localhost:6379/'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Kolkata'
CELERY_ALWAYS_EAGER = True

my celery.py

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
app = Celery('myapp')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app.conf.enable_utc = False
app.conf.update(timezone='Asia/Kolkata', task_always_eager=True)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

В моем файле views.py

@app.task(name="test celery")
def add(a, b):
    print(a, b, a + b)


@api_view(['GET'])
def testcelery(request):
    a = request.GET.get('a', 0)
    b = request.GET.get('b', 0)
    add.delay(a, b)

вывод моего celery worker

>celery -A lylo worker --loglevel=info -c 5
 -------------- celery@LAPTOP-VQHQANA1 v5.1.1 (sun-harmonics)
--- ***** -----
-- ******* ---- Windows-10-10.0.19041-SP0 2021-09-08 22:00:46
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         lylo:0x289e11010b8
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 5 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . myapp.celery.debug_task
  . test celery

[2021-09-08 22:00:47,585: INFO/SpawnPoolWorker-4] child process 6672 calling self.run()
[2021-09-08 22:00:47,585: INFO/SpawnPoolWorker-2] child process 33680 calling self.run()
[2021-09-08 22:00:47,601: INFO/SpawnPoolWorker-3] child process 36712 calling self.run()
[2021-09-08 22:00:47,629: INFO/SpawnPoolWorker-5] child process 21636 calling self.run()
[2021-09-08 22:00:47,689: INFO/SpawnPoolWorker-1] child process 27176 calling self.run()
[2021-09-08 22:00:49,002: INFO/MainProcess] Connected to redis://localhost:6379//
[2021-09-08 22:00:51,021: INFO/MainProcess] mingle: searching for neighbors
[2021-09-08 22:00:58,046: INFO/MainProcess] mingle: all alone
[2021-09-08 22:01:08,068: WARNING/MainProcess] d:\installed\anaconda3\lib\site-packages\celery\fixups\django.py:204: UserWarning: Using settings.DEBUG leads to a memory
            leak, never use this setting in production environments!
  leak, never use this setting in production environments!''')

[2021-09-08 22:01:08,071: INFO/MainProcess] celery@LAPTOP-VQHQANA1 ready.

мой монитор redis-cli my redis monitor

но когда я посылаю запрос, он не возвращает никакого результата, вместо этого он продолжает ждать ответа

enter image description here

Вы установили CELERY_ALWAYS_EAGER = True, это заставляет задачи celery выполняться локально, а не отправляться в очередь. См. https://docs.celeryproject.org/en/stable/userguide/configuration.html#std-setting-task_always_eager .

Ответ на запрос пуст, потому что вы возвращаете неявно None на ваше представление.

Чтобы отправить задания в очередь, установите CELERY_ALWAYS_EAGER = False или просто удалите его (значение по умолчанию False).

Вернуться на верх