我试着在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文档解决这个问题,但是没有一个建议是有用的。我做错了什么,我如何从Celery任务接收结果?
**UPD:**我添加了一个没有ignore_result
参数的任务,但没有任何变化
@app.task
def add_3(x, y):
return x + y
>>>r = add_3.delay(2, 2)
>>>r.state
'PENDING'
6条答案
按热度按时间gz5pxeao1#
根据Celery 'Getting Started' not able to retrieve results; always pending和https://github.com/celery/celery/issues/2146,这是一个Windows问题。Celery
--pool=solo
选项解决了这个问题。e0uiprwp2#
在Windows上尝试
-P threads
,而不是Celery --pool=solo
选项。xtfmy6hx3#
设置
CELERY_TASK_TRACK_STARTED = True
(或在单个任务上设置track_started=True)也会有所帮助-这将启用STARTED状态。laximzn54#
从celery 文档中删除
ignore_result=False
bvjxkvbb5#
谢谢大家。
我的celery 配置:
我已经修正了这样的问题:
我等待这样的问题约1天,并尝试卸载redis和安装redis上的windows 10一些时候。
最后我发现没有并发配置。
第一溶液:
celery -一个mysite工人-l信息-P线程
第二种解决方案:
celery -一个mysite工人-l信息--池=独奏
我的celery 配置:
mbyulnm06#
如果您正在从Celery对象设置配置,则可以使用其他方法-