我正在尝试使用芹菜处理一些任务,但我运气不太好。我正在运行 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.log
并worker1.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