【问题标题】:Configuring Celery on Windows在 Windows 上配置 Celery
【发布时间】:2016-05-12 19:55:29
【问题描述】:

我在 Windows 7 64 位机器上安装了 Celery 3.1.5、RabbitMQ 服务器 3.2.1 和 Python 2.7.5。这是我从first-steps-with-celery复制的代码。

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 & False。

>>> 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:\Python27\lib\site-packages\celery\result.py", line 136, in get
    interval=interval)
  File "C:\Python27\lib\site-packages\celery\backends\amqp.py", line 154, in wait_for
    raise TimeoutError('The operation timed out.')
celery.exceptions.TimeoutError: The operation timed out.
>>>

我验证了 RabbitMQ 服务器正在运行,但是我不知道为什么 celery 会抛出异常。

【问题讨论】:

    标签: windows celery


    【解决方案1】:

    你可以尝试用命令启动worker

    celery -A proj worker -l info --pool==solo

    【讨论】:

    • 请为那些试图将此命令用于生产的人详细说明您的答案。它在生产环境中工作但是,单线程执行模式是单线程的,这对生产不利,因为它忽略了并发选项..
    【解决方案2】:

    虽然有很多事情会导致 result.get() 调用失败——因为在通过 .delay() 命令发送消息到 Celery 到经纪人(RabbitMQ),然后返回到 Celery 工作人员,该工作人员完成工作,并将结果发布回来,等等——我遇到了这个问题,解决方案是 @Deja_vu 建议的“--pool=solo”(注意一个等号,而不是两个)。

    默认的“pool”选项是“prefork”(参见http://docs.celeryproject.org/en/latest/reference/celery.bin.worker.html#module-celery.bin.worker)。所以这可能是Windows下其“prefork”系统中的一个Celery bug:见https://github.com/celery/celery/issues/2146

    相关 StackOverflow 问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 2012-05-19
      • 2018-11-14
      • 1970-01-01
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多