2

再会。

我从名为 myproject-celery 的主要项目中建立了一个单独的项目。这是一个基于构建的项目,其中包含我项目的异步部分。为方便起见,我想要一个文件,该文件将包含这台机器的配置。我知道 celery 提供了 python 配置文件,但我喜欢这种配置风格。

假设我在名为myproject.yaml的 Yaml 配置文件中有一个配置

我想要达到的目标:

./bin/celery worker --config /absolute/path/to/project/myproject.yaml --app myproject.celery

问题真的是我想指定文件的位置,因为它可以改变。我尝试编写自定义加载器类,但失败了,因为我什至不知道为什么以及何时调用此类的许多自定义方法(我发现的唯一文档是http://docs.celeryproject.org/en/ latest/reference/celery.loaders.base.html?highlight=loader#id1对我没有帮助)。我试图在应用程序模块的导入阶段做一些事情,但我无法将文件路径传递给该模块的代码......我想出的唯一解决方案是使用包含路径的自定义 ENV 参数,但我这样做了不明白为什么它不能像我使用的大多数应用程序一样成为启动参数(指的是带有它的粘贴服务 myproject.ini 的金字塔)

所以问题是: 我必须做什么才能从我可以通过绝对路径指定的文件中设置配置?

编辑:这个问题没有得到回答,所以我在 celery 的 github 上发布了一个问题。将等待回复。 https://github.com/celery/celery/issues/1100

4

1 回答 1

1

看起来celery.loaders.base你想要覆盖的方法是read_configuration

from celery.datastructures import DictAttr
from celery.loaders.base import BaseLoader


class YAMLLoader(BaseLoader):
    def read_configuration():
        # Load YAML file here and return a DictAttr instance
于 2012-11-29T20:15:10.213 回答