对于我们的一个Django网站,我们需要运行Celery。
我们在settings.py
中使用了以下Celery设置:
BROKER_URL = "redis://<ip address of the server>:6379/0"
CELERY_RESULT_BACKEND = "redis"
CELERY_REDIS_HOST = "<ip address of the server>"
CELERY_REDIS_PORT = 6379
CELERY_REDIS_DB = 0
Redis正常运行:
$ redis-cli ping
PONG
我们使用以下命令启动Celery服务器:
$ nohup python manage.py celeryd start
我们还有一个带有Celery任务的测试应用程序,但是当我们尝试使用它时,结果永远不会给出并且任务挂起:
$ python manage.py shell
>>> from celerytest.tasks import add
>>> result = add.delay(2, 2)
>>> result.ready() # returns True if the task has finished processing.
False
>>> result.result
None
>>> result.get()
我们正在使用Django 1.3.7,Celery 3.0.9和djcelery 3.0.9。
我们怎样才能找到导致Celery任务挂起的原因?
答案 0 :(得分:1)
我认为您需要使用-EB选项运行celeryd命令。您也可以在前台运行它以确保在将其发送到后台之前一切正常。
e.g。
python manage.py celeryd -EB -l debug
我认为对于日志记录,您应该使用类似下面的内容来实例化您的记录器:
from celery.utils.log import get_task_logger
log = get_task_logger(__name__)
在您的设置中,您可能还需要检查此设置:
CELERYD_HIJACK_ROOT_LOGGER = False
这样我认为你应该能够看到日志。