2016-10-02 4 views
1

チュートリアルを正しく理解していれば、Celery サブタスクタスクとほとんど同じAPIをサポートしますが、他の機能やプロセスに渡すことができるという利点があります。それが事実だった場合Celeryタスクとサブタスクの違いは何ですか?

は明らかに、セロリは単にサブタスクの代わりに、例えば(両方を保ちながらタスクを交換しているだろう、@app.taskデコレータはサブタスクに代わりのタスクに機能を変換しているだろうなど)。だから私は何かを誤解しているに違いない。

タスクは、サブタスクはできません。

セロリAPIがかなり変更されました。私の質問はバージョン3.1(現在、最新)に固有のものです。

編集:

私はドキュメントがサブタスクが他のタスクから呼び出されることを意図していると言う知っています。私の質問は、セロリがタスクを完全に取り除き、サブタスクをどこからでも使用できないようにすることです。彼らは仕事よりも強力な/厳密に、より柔軟であるように見える:

# tasks.py 
from celery import Celery 
app = Celery(backend='rpc://') 

@app.task 
def add(x, y): 
    # just print out a log line for testing purposes 
    print(x, y) 

# client.py 
from tasks import add 
add_subtask = add.subtask() 
# in this context, it seems the following two lines do the same thing 
add.delay(2, 2) 
add_subtask.delay(2, 2) 
# when we need to pass argument to other tasks, we must use add_subtask 
# so it seems add_subtask is strictly better than add 
+0

サブタスクは、タスクから実行されるセカンダリタスクだと思います。 http://stackoverflow.com/questions/6349371/celery-task-that-runs-more-tasks – Hussain

+0

@Hussainはい、正確です。更新された質問を参照してください。 – max

答えて

1

あなたはセロリとcomplex workflowsの使用を開始するときには、アカウントに違いがかかります。

署名は、()の引数、キーワード引数、それは 機能あるいはシリアライズに渡され、ワイヤを介して送信することができるように単一のタスク呼出しの実行 オプションをラップします。

シグネチャは、タスク内で呼び出されるタスク を記述するため、「サブタスク」と呼ばれることがよくあります。

また:

サブタスクちょうどタスク 呼出しの署名の周りに渡すために使用されるオブジェクト(例えば、ネットワークを介してそれを送信する)

Taskあるれますデコレータでラップされた関数定義ですが、subtaskはパラメータが渡されたタスクですが、まだ開始されていません。ネットワーク経由でシリアライズされたサブタスクを転送したり、グループ/チェーン/コード内で呼び出すことができます。

+0

ええと、それは明らかですが、私の元の質問に対する答えはまだ分かりません。タスクよりもサブタスクは厳密にパワフル/フレキシブルではありませんか?なぜセカンダリを扱うのか、セロリからそのコンセプトを取り除いて、サブタスクだけを扱うのはなぜですか?タスクとは異なり、サブタスクは回り回すことができ、分割することができ、複雑なワークフローで組み合わせることができます。しかし、サブタスクにはタスクと同じように '.delay()'メソッドもあります。サブタスクでできないタスクがありますか? – max

+0

これまでのところ理解していますが、サブタスクはワークフローを整理できるため、より柔軟に見えます。しかし、複雑なキャンバスワークフローを使用しない場合は、単にタスクを使用することができます。タスクは、サブタスクよりも高いレベルの抽象化です。サブタスクは、シリアル化されたタスクだけです。 – baldr

+0

タスクはより高いレベルの抽象化とはどのようになっていますか?私の理解とあなたの答えに基づいて、*タスク*はサブタスク*ができることのほんの一部を行うことができ、*サブタスク*はできません。なぜ、より強力なオブジェクトを使用するのと同じように簡単に使えば、私は不自由なオブジェクトを使いたいのですか? – max

関連する問題