app.worker_main()
を使用すると、ワーカーをスレッドとして実行できます。
コマンドラインから実行できたので、私はあなたがすでにCelery
クラス(通常はdocsにapp
と呼ばれています)のオブジェクトを作成していると仮定します。ワーカーをスレッドとして実行するには、次のコードを試すことができます。
from celeryconfig import app # config file you must have build earlier where app = Celery(), object of Celery class
def worker():
# Arguments you give on command line
argv = [
'worker','-A','<module>.tasks',
'-P','gevent', # Would probably need this argument if running with other Greenlets
'--loglevel=info']
app.worker_main(argv)
モジュールのmain.pyファイルに上記の方法のスレッドを作成するだけです。
セロリのビートの場合、私はこれまで同じような方法を自分で構築しようとしていました。 (すでにメソッドが存在するかどうかはわかりません)。私は、次のメソッドを書き、
def beat_main(self, argv=None):
return instantiate(
'celery.bin.beat:beat',
app=self).execute_from_commandline(argv)
あなたのセロリクラスは/usr/local/lib/python2.7/dist-packages/celery/app/base.py
で書かれているセロリクラスにこれを追加しました。作業者と同じ方法で使用してください(app.beat_main
引数あり)。それもあなたのために動作することを願っています。