首页 > 解决方案 > 如何使用 Dynaconf 配置 Celery

问题描述

最近我发现了 Dynaconf,这是一个很好的配置管理包,可以很好地与 Flask 和 Django 集成。Django 应用程序与 Dynaconf 一起运行得非常好。但是,我的应用程序运行后台任务所依赖的 Celery 应用程序不是。

以下是使用 Dynaconf 之前运行的 Celery 应用程序的配置代码:

from celery import Celery
app = Celery('KillerApp')
app.config_from_object('django.conf:settings', namespace='CELERY')

看来我需要将 'django.conf:settings' 更改为其他内容。有任何想法吗?

标签: pythonconfigurationcelerydjango-celery

解决方案


你可以传入一个表示要导入的模块的字符串,或者直接传入配置对象;请参阅Celery.config_from_object()方法文档

您将拥有一个设置Dynaconf()实例的模块,例如,如果您有一个名为的包acme_project,其中包含一个config.py文件

from dynaconf import Dynaconf

settings = Dynaconf(
    settings_files=['settings.toml', '.secrets.toml'],
)

然后你可以导入acme_project.config并在那里找到settings对象。您可以导入该对象或让 Celery 通过使用'acme_project.config:settings'作为传递给的值来执行此操作app.config_from_object()。该namespace参数告诉 Celery 期望所有设置都以 为前缀CELERY_,就像它在 Django 中的工作方式一样。如果您计划使用 Dynaconf 管理的设置来配置多个组件,而不仅仅是 Celery,请使用此选项。

例如,如果您使用:

app.config_from_object('acme_project.config:settings', namespace='CELERY')

那么您settings.tomlsettings.yaml您选择的任何文件格式都需要CELERY_用作所有设置的前缀。


推荐阅读