我已经在Windows 7 64位机器上安装了Celery 3.1.5、RabbitMQ服务器3.2.1和Python 2.7.5。这是我用芹菜从第一步复制的代码。
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
当我从python shell执行任务时,我收到了"操作超时"的异常消息。state和ready()总是返回PENDING&错误。
>>> from tasks import *
>>> result = add.delay(4, 4)
>>> result.ready()
False
>>> result.state
'PENDING'
>>> result.get(timeout=20)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python27libsite-packagesceleryresult.py", line 136, in get
interval=interval)
File "C:Python27libsite-packagescelerybackendsamqp.py", line 154, in wait_for
raise TimeoutError('The operation timed out.')
celery.exceptions.TimeoutError: The operation timed out.
>>>
我验证了RabbitMQ服务器正在运行,但我不知道为什么会抛出芹菜异常。
您可以尝试使用命令启动工作程序
celery -A proj worker -l info --pool==solo
尽管有很多事情会导致result.get(,等等——我有这个问题,解决方案是@Deja_vu建议的"--pool=solo"(注意一等于符号,而不是二)。
默认的"pool"选项为"prefork"(请参阅http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#module-celery.bin.worker)。因此,这可能是Celery在Windows下的"预处理"系统中的错误:请参阅https://github.com/celery/celery/issues/2146
相关StackOverflow问题:
- 芹菜';入门';无法检索结果;始终挂起
- 从Celery队列获取结果时出现问题