python - Canonical Celery 单文件 hello world

标签 python python-3.x redis celery

我似乎无法在网上的任何地方找到一个可以使用 Celery 和 Python 从头到尾运行的文件来演示它,所以我尝试制作一个。由于某种原因,这不起作用,我是 Celery 的新手。在 test_celery.py 中,我添加了以下内容:

from celery import Celery
import time

app = Celery(
    'test_celery'
    ,broker= 'redis://localhost/0',
    backend='redis://localhost/1'
)

@app.task
def add(x, y):
    time.sleep(2)
    return x + y

if __name__ == '__main__':
    result = add.delay(4, 4)
    print( result.get() )

然后我在本地主机上运行 redis 服务器并在控制台输入:

celery -A test_celery worker --loglevel=info

所以,现在工作人员正在监听,我尝试运行 python test_celery.py,认为我应该在控制台输出中看到我精彩的 8。在 worker 控制台的日志中,我看到 [2015-01-02 16:53:08,807: INFO/MainProcess] Task test_celery.add[2c6b19c0-3a3f-45d2-8024-64e112fa3419] successed in 1.9970000002067536s: 8 符合预期,但对 result.get 的调用在主程序控制台中挂起。

我一定是遗漏了一些基本的东西,如果有人能提供帮助那就太好了。

最佳答案

解决方案是简单地使用 app.conf.update 调用而不是在 Celery 对象的构造函数中设置结果后端。

我在 this post 中找到了这个问题的解决方案的 this thread在 Celery GitHub 页面上。它仍然是一个悬而未决的问题(目前)

解决方案

from celery import Celery
import time

app = Celery(
    'test_celery'
    ,broker= 'redis://localhost/0'
)

app.conf.update(
    CELERY_RESULT_BACKEND = 'redis://localhost/1'
)

@app.task
def add(x, y):
    time.sleep(2)
    return x + y

if __name__ == '__main__':
    result = add.delay(4, 4)
    print( result.get() )

按预期工作。

关于python - Canonical Celery 单文件 hello world,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749121/

相关文章:

python-3.x - 用户输入元组列表?

python - 类变量引用本身?

redis - 使用 Spring Data Repository 在 Redis 中使用 Long 自动增量?

python - 如何在 ubuntu 18.04 64 位上安装 pycurl 7.43

Python IMAP - 使用 BASE64 编码和 KOI8-R 字符集解码文本

python-3.x - 在 pandas 中分割日期时间

node.js - 如何获得所有回答值条件的键

Redis 键随机消失

python - 如何使用循环从 Pandas 数据框中获取值?

python - 使用 as_strided 分割 numpy 数组