Celery 无法连接到 redis 服务器

use*_*680 3 django redis celery

我有一个使用 celery==4.2.1、redis==2.10.6、redis-server=4.0.9 的 django 2.0.5 应用程序。当我启动 celery worker 时,我得到以下输出:

-------------- celery@octopus v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.18.16-surface-linux-surface-x86_64-with-Ubuntu-18.04-bionic 2018-10-31 17:33:50
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         MemorabiliaJSON:0x7fd6c537b240
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
Run Code Online (Sandbox Code Playgroud)

但在我的 Django 设置中,我有:

CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_IMPORTS = ('memorabilia.tasks',
                  'face_recognition.tasks',
                  )
Run Code Online (Sandbox Code Playgroud)

我的 celery.py 看起来像:

# http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from django.apps import apps
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MemorabiliaJSON.settings.tsunami')

app = Celery('MemorabiliaJSON')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: [n.name for n in apps.get_app_configs()])
Run Code Online (Sandbox Code Playgroud)

相同的代码(通过我的 git 服务器共享)适用于我的开发机器,尽管 redis 服务器有点旧 - v=2.8.4。开发机为Ubunut 14.04,笔记本为Ubuntu 18.04。通过作品,我的意思是这是我的开发机器上的 celery 输出:

 -------------- celery@tsunami v4.2.1 (windowlicker)
---- **** ----- 
--- * ***  * -- Linux-4.4.0-138-generic-x86_64-with-Ubuntu-14.04-trusty 2018-10-31 17:38:09
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         MemorabiliaJSON:0x7f356e024c18
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
Run Code Online (Sandbox Code Playgroud)

我如何让 celery 读取 celery.py 以外的 django 配置文件?

谢谢!

标记

小智 11

更改localhost127.0.0.1解决我的问题:

CELERY_BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True
Run Code Online (Sandbox Code Playgroud)