python - celery 任务总是挂起

标签 python windows redis celery

我尝试在 Windows 上使用 redis 后端运行 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'

最佳答案

根据 Celery 'Getting Started' not able to retrieve results; always pendinghttps://github.com/celery/celery/issues/2146这是一个Windows问题。 Celery --pool=solo 选项解决了这个问题。

关于python - celery 任务总是挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27357732/

相关文章:

python - 总结每天 Pandas 的出现次数

python - 如何使用 pcolormesh 获得对数自定义色标?

redis - 比较 1000 万套彼此

java - 如何在 Apache Beam 中使用流输入 PCollection 请求 Redis 服务器?

python - 获取 2 个独立的 python 模块实例

python - 如何查找 NumPy 数组中的部分元素

windows - 如何在 Windows 7 的 Active Directory 中为帮助台用户提供只读访问权限?

spring - 如何创建 Redis 条件 Bean?

windows - cmd/c 以及文件路径中的 & 符号

objective-c - 是否可以在 Windows 中执行 Objective-C 程序?