芹菜任务没有被处理

时间:2014-04-15 03:09:58

标签: python rabbitmq task celery broker

我试图用芹菜来处理一些任务,而且我没有太多的运气。我将celeryd和celerybeat作为守护进程运行。我有一个tasks.py文件看起来像这样一个简单的应用程序和任务定义:

from celery import Celery

app = Celery('tasks', broker='amqp://user:pass@hostname:5672/vhostname')

@app.task
def process_file(f):
    # do some stuff
    # and log results

此文件是从另一个文件process.py引用的,我用它监视文件更改,如下所示:

from tasks import process_file

file_name = '/file/to/process'
result = process_file.delay(file_name)
result.get()

使用这些小代码,芹菜无法查看任务并处理它们。我可以在python解释器中执行类似的代码,celery处理它们:

py >>> from tasks import process_file
py >>> process_file.delay('/file/to/process')
<AsyncResult: 8af23a4e-3f26-469c-8eee-e646b9d28c7b>

但是当我从解释器运行任务时,beat.logworker1.log不会显示任何已收到任务的迹象,但使用logging我可以确认任务代码已执行。 .log文件中也没有明显错误。什么可能导致这个问题的想法?

我的/etc/default/celerybeat看起来像是:

CELERY_BIN="/usr/local/bin/celery"
CELERYBEAT_CHDIR="/opt/dirwithpyfiles"
CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule"

/etc/default/celeryd

CELERYD_NODES="worker1"
CELERY_BIN="/usr/local/bin/celery"
CELERYD_CHDIR="/opt/dirwithpyfiles"
CELERYD_OPTS="--time-limit=300 --concurrency=8"
CELERYD_USER="celery"
CELERYD_GROUP="celery"
CELERYD_LOG_FILE="/var/log/celery/%N.log"
CELERYD_PID_FILE="/var/run/celery/%N.pid"
CELERY_CREATE_DIRS=1

1 个答案:

答案 0 :(得分:7)

所以我通过从cli而不是作为守护进程运行celery来解决我的问题,使我能够看到更详细的错误输出。我这样做是通过运行:

user@hostname   /opt/dirwithpyfiles $ su celery
celery@hostname /opt/dirwithpyfiles $ celery -A tasks worker --loglevel=info

在那里,我可以看到权限问题发生在celery用户身上,当我从python解释器作为普通用户运行命令时没有发生。我通过更改/file/to/process的权限来修复此问题,以便两个用户都可以从中进行读取。