Canonical Celery 单文件 hello world
Canonical Celery single file hello world
我似乎无法在网上的任何地方找到一个可以使用 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。在工作人员控制台的日志中,我看到 [2015-01-02 16:53:08,807: INFO/MainProcess] Task test_celery.add[2c6b19c0-3a3f-45d2-8024-64e112fa3419] succeeded in 1.9970000002067536s: 8
符合预期,但对 result.get
的调用在主程序控制台中挂起。
我一定是遗漏了一些基本的东西,如果有人能提供帮助那就太好了。
解决方案是简单地使用 app.conf.update
调用而不是在 Celery
对象的构造函数中设置结果后端。
我在 Celery GitHub 页面的 this post of this thread 中找到了这个问题的解决方案。它仍然是一个悬而未决的问题(目前)
解决方案
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() )
按预期工作。
我似乎无法在网上的任何地方找到一个可以使用 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。在工作人员控制台的日志中,我看到 [2015-01-02 16:53:08,807: INFO/MainProcess] Task test_celery.add[2c6b19c0-3a3f-45d2-8024-64e112fa3419] succeeded in 1.9970000002067536s: 8
符合预期,但对 result.get
的调用在主程序控制台中挂起。
我一定是遗漏了一些基本的东西,如果有人能提供帮助那就太好了。
解决方案是简单地使用 app.conf.update
调用而不是在 Celery
对象的构造函数中设置结果后端。
我在 Celery GitHub 页面的 this post of this thread 中找到了这个问题的解决方案。它仍然是一个悬而未决的问题(目前)
解决方案
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() )
按预期工作。