Celery получает задания от rabbitmq, но не выполняет их

У меня есть проект Django и я настроил Celery + RabbitMQ для асинхронного выполнения тяжелых задач. Когда я вызываю задачу, RabbitMQ admin показывает задачу, Celery печатает, что задача получена, но задача не выполняется

Вот код задачи:

@app.task
def dummy_task():
    print("I'm Here")
    User.objects.create(username="User1")
    return "User1 Created!"

В этом представлении я отправляю задание на сельдерей:

def task_view(request):
      result = dummy_task.delay()
      return render(request, 'display_progress.html', context={'task_id': result.task_id})

Я запускаю celery с помощью этой команды:

$ celery -A Snappshop   worker -l info --concurrency=2 --without-gossip

Это результат работы Celery:

-------------- celery@DESKTOP-8CHJOEG v5.2.7 (dawn-chorus)
--- ***** ----- -- ******* ---- Windows-10-10.0.19044-SP0 2022-08-22 10:10:04

  • *** --- * ---
  • ** ---------- [config]
  • ** ---------- .> app: proj:0x23322847880
  • ** ---------- .> transport: amqp://navid:**@localhost:5672//
  • ** ---------- .> results:
  • *** --- * --- .> concurrency: 2 (prefork) -- ******* ---- .> события задачи: OFF (включите -E для мониторинга задач в этом рабочем) --- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery

[задачи] .proj.celery.debug_task . entitymatching.tasks.create_and_learn_machine . entitymatching.tasks.dummy_task

.

[2022-08-22 10:10:04,068: INFO/MainProcess] Подключено к amqp://navid:**@127.0.0.1:5672// [2022-08-22 10:10:04,096: INFO/MainProcess] mingle: поиск соседей [2022-08-22 10:10:04,334: INFO/SpawnPoolWorker-1] дочерний процесс 6864 вызывает self.run() [2022-08-22 10:10:04,335: INFO/SpawnPoolWorker-2] child процесс 12420 вызывает self.run() [2022-08-22 10:10:05,134: INFO/MainProcess] mingle: all alone [2022-08-22 10:10:05,142: WARNING/MainProcess] C:\Users\Navid\PycharmProjects\proj\venv\lib\site-packages\celery\fixups\django.py:203: UserWarning: Использование settings.DEBUG приводит к утечке памяти никогда не используйте эту настройку в производственных средах! warnings.warn('''Использование settings.DEBUG приводит к утечке памяти

.

[2022-08-22 10:10:05,142: INFO/MainProcess] celery@DESKTOP-8CHJOEG готов. [2022-08-22 10:10:05,143: INFO/MainProcess] Task entitymatching.tasks.dummy_task[97f8a2eb-0006-4d53-ba6a-7b9f8649c84a] получено [2022-08-22 10:10:05,144: INFO/MainProcess] Задача entitymatching.tasks.dummy_task[17190479-0784-46b1-8dc6-870ead41e9c6] получено [2022-08-22 10:11:36,384: INFO/MainProcess] Задача Snappshop.celery.debug_task[af3d633f-7b9a-4441-b375-9ce217a40ab3] получено

Но "I'm Here" не печатается, и User1 не создается.

RabbitMQ показывает, что в очереди находится 3 сообщения "unack": enter image description here

Вы не предоставили достаточно информации, хотя я думаю, что у вас проблемы с рабочими пулами.

попробуйте добавить

--pool=solo

в конце команды run. это будет выглядеть как

celery -A proj worker -l info --concurrency=2 --without-gossip --pool=solo

хотя на производстве я рекомендую использовать gevent в качестве пула.

celery -A proj worker -l info --concurrency=2 --without-gossip --pool=gevent
Вернуться на верх