芹菜任务未处理

Posted

技术标签:

【中文标题】芹菜任务未处理【英文标题】:Celery Tasks Not Being Processed 【发布时间】:2014-05-29 05:36:27 【问题描述】:

我正在尝试使用 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 解释器中执行类似的代码并 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】:

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

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

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

【讨论】:

以上是关于芹菜任务未处理的主要内容,如果未能解决你的问题,请参考以下文章

celery - 尽管已注册,但任务未运行。芹菜控制台不反映任务的接收

芹菜任务未显示在 Django Admin 中

调用异步任务芹菜时引发异常:“NameError:未定义全局名称*”

如何在不杀死未完成的芹菜任务的情况下重新启动heroku应用程序

芹菜不处理来自 RabbitMQ 的任务

task_revoked 处理程序中的芹菜任务 ID