Celery接收来自rabbitmq的任务,但不执行它们

daupos2t  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(187)

我有一个Django项目,并设置了Celery + RabbitMQ来异步执行繁重的任务。当我调用任务时,RabbitMQ管理员显示任务,Celery打印任务已收到,但任务未执行。
下面是任务的代码:

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

在这个视图中我向celery 发送了任务:

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

我使用以下命令运行Celery:

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

这是运行Celery的输出:
--------------celery @台式机-8 CHJOEG v5.2.7(黎明合唱)
2016年12月26日,北京,北京,北京,北京,北京,北京,北京

****----
--------- [配置]
*---------- .〉应用程序:项目:0x 23322847880
-------- .〉运输工具:amqp://导航ID:@本地主机:5672//
***-------- .〉结果:
-- * --- .〉并发性:2(预派生)--
---.〉任务事件:OFF(启用-E以监视此工作进程中的任务)---
-------------------- [队列]。〉celery 交换=celery (直接)键=celery

[任务] .项目.celery .调试任务.实体匹配.任务.创建和学习计算机.实体匹配.任务.虚拟任务
[2022年8月22日10:10:04,068:[navid:**@127.0.0.1:5672//2022-08-22 10:10:04,096:00,000]已连接至amqp://www.example.com网站,请输入以下信息:INFO/主进程]混合:搜索邻居[2022-08-22 10:10:04,334:[self.run2022-08-22 10:10:04,335:05]在一个新的应用程序中,一个新的应用程序可以在一个新的应用程序中运行。[2022-08-22 10:10:05,134:05,145]在一个新的进程中,一个新的进程被调用。INFO/主进程]混合:[2022-08-22 10:10:05,142:2000]我是一个很好的朋友。警告/主进程] C:\用户\Navid\PycharmProjects\项目\venv\库\站点包\celery \修复\django.py:203:使用者警告:使用设置.调试会导致内存泄漏,切勿在生产环境中使用此设置!warnings.warn('''使用设置.调试会导致内存泄漏
[2022-08-22 10:10:05,142:10:10:05,我的天啊![2022- 08 -22 10:10:05,143:00 - 2022-08- 21:05:05:00 - 08:02:05:00 - 08:02:05:00 - 08:02:05:00 - 08:02:00 - 08:02:02:00 - 08:02:02:00 - 08:02:00 - 08:02:02:00 - 08:02:02:00 -08:02:02:02:02:02:02:02:02:02:02:02:02:02:02:02:02 [2022-08-22 10:10:05,144:000]已接收到任务实体匹配的任务。虚拟任务[2022-08-22 10:11:36,384:2012 -08- 21:2012 -08- 21:21:21:21:21]已接收到任务实体匹配的任务。信息/主进程]已收到任务项目celery 调试任务[af 3d 633 f-7 b 9a-4441-b375- 9 ce 217 a40 ab 3]
但不会打印“I 'm Here”,也不会创建User 1。
RabbitMQ显示队列中有3条“未确认”消息:

vbkedwbf

vbkedwbf1#

你没有提供足够的信息,虽然我认为你有你的工人池的问题。
尝试添加

--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

相关问题