Django celeryd使用了错误的代理,甚至在config_from_object之后



这是我的芹菜文件:

from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_app.settings')
app = Celery('my_app', broker=settings.BROKER_URL)
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

在我的settings.py中我有这个:

#Celery stuff
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

但是当运行celeryd时,会发生以下情况:

- ** ---------- [config]
- ** ---------- .> app:         default:0x1052af590 (.default.Loader)
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 8 (prefork)

它似乎没有使用我提供的配置。我错过了什么?

编辑:评论建议我使用dj芹菜:

import djcelery
djcelery.setup_loader()
BROKER_HOST = 'localhost'
BROKER_PORT = 6379
BROKER_USER = 'guest'
BROKER_PASSWORD = 'guest'
BROKER_VHOST = '/'
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

即使这样,celeryd仍然默认为5672

我想你忘记在config_from_object方法中指定namespace属性了。

所以,你需要替换这个

app.config_from_object("django.conf:settings", namespace="CELERY")

app.config_from_object("django.conf:settings")

相关内容

  • 没有找到相关文章

最新更新