2016-09-16 11 views
2

労働者なしでセロリの仕事をすべて実行する方法は、直接電話することですか? 私はTaskName.run()でタスクを呼び出すことができますが、これを設定で書きたいので、どのようにしたらいいですか?労働者なしでセロリの仕事を実行する

答えて

4

CELERY_ALWAYS_EAGERの設定をtrueに設定するだけで、セロリはタスクをキューに入れずに強制的に現在のプロセスで実行します。代わりにapply_async()または遅れでそれらを実行しているの

あなたが特定のタスクごとにそれを行うことができるようにしたい場合は、(適用でそれらを実行することができます)または実行()あなたが述べたように、

だから、TL; DR:OK

CELERY_ALWAYS_EAGER = True 
# The following two would do and act the same, processing synchronously 
my_task.run() 
my_task.delay() 

しかし

CELERY_ALWAYS_EAGER = False 
# These two won't be the same anymore. 
my_task.run() # Runs synchronously 
my_task.delay() # Passed to the queue and runs Asynchronously, in another process 
0

私はあなたのことをよく理解していれば、タスクを同期して呼び出すことができます。

ただ、通常通りメソッドを呼び出します。

TaskName() 

あなただけが労働者に送信する場合delayを使用する必要があります。

+0

が、どのようにあなたは、戻り値を得るのですか?これはセロリで他の何かにラップされています – kentor

+1

いいえ、あなたはいつもタスクとして指定されたメソッドを、Pythonで他のメソッドを呼び出すのと同じように呼び出すことができます。 Celeryは外部プロセスが実行できるキューに呼び出しを追加するだけです。セロリの内側と外側の両方でそのタスクを呼び出す必要がある場合(外部からは、レスポンスなどのポーリングや非同期ツールを使用せずにスクリプトを実行して同期していることを意味します)、正常。何も必要ない。それはまだ値を返すことができるpythonのメソッドです。 –

関連する問題