无法查看celery-rabbitMQ组合中执行的任务的输出消息

问题描述 投票:2回答:2

我正在尝试用于异步任务调度的celery和rabbitMQ组合,下面是我在Pycharm IDE上尝试的示例程序....一切似乎都在工作,但我无法从任务中看到返回值。

我也在监视rabbitMQ管理控制台,但仍然无法看到任务的返回值。

我不明白我哪里错了,这是我第一次尝试芹菜和RabbitMQ

我创建了一个tasks.py文件,其中包含2个示例任务(分配了适当的装饰器)并为每个任务返回一个值。

我也启动了RabbitMQ服务器(使用{rabbitmq-server start}命令)。

然后我开始了芹菜工作者,使用的命令:{celery -A tasks --loglevel=info}

现在,当我尝试使用delay()方法执行这些任务时,命令({reverse.delay('andy')})正在运行,我正在运行,类似这样,但我无法看到返回的值。

from celery import  Celery

app = Celery('tasks', broker= 'amqp://localhost//', backend='rpc://')

@app.task
def reverse(string):
    return string[::-1]

@app.task
def add(x, y):
    return x + y
python python-3.x rabbitmq pycharm celery
2个回答
1
投票

好吧,我已经找到了问题...它接缝最新版本的芹菜不适合使用Windows。为了解决这个问题,我安装了'eventlet'软件包,它完成了其余工作。

需要注意的一点是,我们需要使用eventlet支持启动芹菜工作者,PFB命令:

celery -A <module_name> worker -loglevel=info -P eventlet

0
投票

您可以检查任务by using the result property的返回值。下面的语法是在python3中使用类型提示,以便您可以跟随正在进行的操作。

import time
from celery.result import AsyncResult

result: AsyncResult = reverse.delay('andy')
task_id: str = result.id

while not result.ready():
    time.sleep(1)
    result = AsyncResult(task_id)
if result.successful():
   return_value = result.result

n.b.,上面是一个天真的例子,因为在生产环境中,你通常不像我们在这里那样忙碌等待。相反,客户端发出定期轮询,检查状态是否准备好,如果没有,则将控制权返回给代码的其他部分(如带有微调器的UI)。

© www.soinside.com 2019 - 2024. All rights reserved.