美好的一天。
我设置了一个名为myproject-celery的独立项目。它是一个基于buildout的项目,包含我项目的异步部分。为方便起见,我想要一个包含该机器配置的文件。我知道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并且它对我没有帮助) 。我尝试在app模块的导入阶段做一些事情,但是我无法将文件路径传递给该模块的代码......我想出的唯一解决方案是使用包含路径的自定义ENV参数,但是我做了不知道为什么它不能像我在大多数应用程序中那样使用启动参数(使用它的paster参考金字塔服务myproject.ini)
所以问题是: 如何通过绝对路径指定的文件设置配置?
编辑: 这个问题没有得到回答,播种我在芹菜的github上发布了一个问题。将等待回复。 https://github.com/celery/celery/issues/1100
答案 0 :(得分: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