2

良い一日。

myproject-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でピラミッドを参照)

だから質問: 絶対パスで指定できるファイルから構成を設定するにはどうすればよいですか?

編集:質問には答えられなかったので、セロリの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 に答える