Celery任务未被处理

7

我正在尝试使用celery处理一些任务,但是进展不顺利。我正在将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()

使用上述代码后,Celery 无法识别任务并处理。在 Python 解释器中执行类似的代码则不会出现这种情况。
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个回答

7

我通过从命令行而不是作为守护程序运行celery的方式解决了我的问题,这使我能够查看发生错误的更详细输出。我通过运行以下命令来实现:

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

我发现一个权限问题,当我用celery用户运行命令时,这个问题出现了,但是当我用普通用户在python解释器中运行命令时,没有这个问题。我通过更改/file/to/process的权限,使得两个用户都可以读取它来解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接