我用芹菜和兔子用头撞墙。
本教程中的此示例工作正常:
from celery import Celery
app = Celery('tasks', backend='amqp', broker='amqp://')
@app.task
def add(x, y):
return x + y
我跑:
celery -A tasks worker --loglevel=info
我得到输出:
[2014-11-18 19:47:58,874: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2014-11-18 19:47:58,881: INFO/MainProcess] mingle: searching for neighbors
[2014-11-18 19:47:59,889: INFO/MainProcess] mingle: all alone
[2014-11-18 19:47:59,896: WARNING/MainProcess] celery@vagrant-ubuntu-trusty-64 ready.
我现在可以从python repl运行任务并获得结果。
但是当我安装芹菜时,这个过程挂断了混合步骤:
[2014-11-18 20:18:33,893: INFO/MainProcess] mingle: searching for neighbors
在此之后没有输出。
我的/etc/default/celeryd 看起来像这样:
ENABLED="true"
CELERYD_NODES="w1"
CELERYD_CHDIR="/home/myusername/src/celery-test"
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERY_CONFIG_MODULE="celeryconfig"
CELERYD_LOG_FILE="/var/log/celery/%n.log"
CELERYD_USER="celery"
CELERYD_GROUP="celery"
我正在使用这些版本:
乌班图14.04芹菜 3.1.16 (芹菜)芹菜 3.1.6-1ubuntu1RabbitMQ-server 3.2.4-1蟒蛇 2.7.6
因此,在没有守护程序的情况下,芹菜可以自行初始化,但使用守护进程(芹菜)显然挂在混合步骤上。
一些论坛认为这是 RabbitMQ 达到磁盘空间限制的问题。我有很多磁盘,RabbitMQ 自己的日志没有表明任何问题。
如果使用数据库后端,则向芹菜添加以下选项应该可以解决问题:
--without-mingle
我从这条消息中得到了预感:
[2014-11-18 16:20:17,216: WARNING/MainProcess] /usr/local/lib/python2.7/dist-packages/kombu/transport/librabbitmq.py:163: UserWarning:
librabbitmq version too old to detect RabbitMQ version information
so make sure you are using librabbitmq 1.5 when using rabbitmq > 3.3
warnings.warn(UserWarning(W_VERSION))
所以出于某种原因,我有 librabbitmq1 apt 包,它太旧了。
事实证明,问题出在 librabbitmq1 包上。我用以下方法删除了它:
sudo apt-get remove librabbitmq1
python Celery/RabbitMQ libs做了某种回退到其他一些(也许是普通的python?)实现,它有效!
检查您的可用磁盘空间。RabbitMQ 默认需要 1Gb 的可用空间。