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":
Вы не предоставили достаточно информации, хотя я думаю, что у вас проблемы с рабочими пулами.
попробуйте добавить
--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