2016-05-23 6 views
2

私はセロリを使っていくつかの時間をトリガーにした仕事をしています。通常のコマンドラインメソッドを使用すると、簡単にタスクを生成して実行することができます。このために私はデーモンを2つ作成しなければなりません。一つはセロリのためのもので、もう一つはセロリのためのものです。セロリの作業員とセロリを糸として叩く

セロリは時間トリガータスクの作成と実行という私の問題を解決しますが、私のシステムには2つの追加デーモンが必要です。私はすでにデーモンを自分のモジュールのために走らせています。私はそれを再利用したいのです(セロリーワーカーを追加し、既存のモジュールにスレッドとしてビートする)。そうする方法はありますか?

答えて

2

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引数あり)。それもあなたのために動作することを願っています。

関連する問題