モジュールにCelery
アプリを定義しました。次に、__main__
内の同じモジュールからワーカーを開始します。つまり、コマンドラインからcelery
ではなくpython -m
を使用してモジュールを実行します。私はこれを試しました:
app = Celery('project', include=['project.tasks'])
# do all kind of project-specific configuration
# that should occur whenever this module is imported
if __name__ == '__main__':
# log stuff about the configuration
app.start(['worker', '-A', 'project.tasks'])
しかし今、セロリは私が引数なしでワーカーを実行していると考えています:
Usage: worker <command> [options]
Show help screen and exit.
Options:
-A APP, --app=APP app instance to use (e.g. module.attr_name)
[snip]
使用法メッセージは、コマンドを取得しなかったかのように、celery --help
から取得するメッセージです。私も試しました
app.worker_main(['-A', 'project.tasks'])
しかし、これは-A
が認識されないという不満を持っています。
では、どうすればよいですか?または、構成に関する情報をログに記録するようにワーカーにコールバックを渡すにはどうすればよいですか?
Django-Celeryモジュールからのコード に基づいて、次のようなことを試すことができます。
from __future__ import absolute_import, unicode_literals
from celery import current_app
from celery.bin import worker
if __name__ == '__main__':
app = current_app._get_current_object()
worker = worker.worker(app=app)
options = {
'broker': 'amqp://guest:guest@localhost:5672//',
'loglevel': 'INFO',
'traceback': True,
}
worker.run(**options)
app.worker_mainメソッドを使用(v3.1.12):
± cat start_celery.py
#!/usr/bin/python
from myapp import app
if __name__ == "__main__":
argv = [
'worker',
'--loglevel=DEBUG',
]
app.worker_main(argv)
セロリがそれらを読むことができるように、あなたは引数のラップを欠いているだけだと思います:
queue = Celery('blah', include=['blah'])
queue.start(argv=['celery', 'worker', '-l', 'info'])