【发布时间】:2020-11-28 03:55:13
【问题描述】:
我尝试在带有 redis 后端的 Windows 上运行 Celery 示例。代码如下:
from celery import Celery
app = Celery('risktools.distributed.celery_tasks',
backend='redis://localhost',
broker='redis://localhost')
@app.task(ignore_result=False)
def add(x, y):
return x + y
@app.task(ignore_result=False)
def add_2(x, y):
return x + y
我使用 iPython 控制台启动任务:
>>> result_1 = add.delay(1, 2)
>>> result_1.state
'PENDING'
>>> result_2 = add_2.delay(2, 3)
>>> result_2.state
'PENDING'
似乎这两个任务都没有执行,但是 Celery worker 输出显示他们成功了:
[2014-12-08 15:00:09,262: INFO/MainProcess] Received task: risktools.distributed.celery_tasks.add[01dedca1-2db2-48df-a4d6-2f06fe285e45]
[2014-12-08 15:00:09,267: INFO/MainProcess] Task celery_tasks.add[01dedca1-2db2-48df-a4d6-2f06fe28
5e45] succeeded in 0.0019998550415s: 3
[2014-12-08 15:00:24,219: INFO/MainProcess] Received task: risktools.distributed.celery_tasks.add[cb5505ce-cf93-4f5e-aebb-9b2d98a11320]
[2014-12-08 15:00:24,230: INFO/MainProcess] Task celery_tasks.add[cb5505ce-cf93-4f5e-aebb-9b2d98a1
1320] succeeded in 0.010999917984s: 5
我已尝试根据Celery documentation 解决此问题,但没有任何建议有用。我做错了什么,如何从 Celery 任务中接收结果?
统一更新:
我添加了一个没有ignore_result 参数的任务,但没有任何改变
@app.task
def add_3(x, y):
return x + y
>>>r = add_3.delay(2, 2)
>>>r.state
'PENDING'
【问题讨论】:
-
.get()将返回结果。不知道为什么你总是收到PENDINGtho -
@user2097159
.get()失败并显示TimeoutError: The operation timed out. -
您是否在任何地方设置了
BROKER_URL?
标签: python windows redis celery