web-dev-qa-db-ja.com

セロリタスクを作成するためのさまざまな方法の違い

私はセロリのタスクを作成するさまざまな方法を見ることによって非常に混乱しています。表面上ですべて同じように機能します、誰かがこれらの違いが何であるかを説明することができます。

1。

from myproject.tasks import app

@app.task
def foo():
    pass
 _

2。

from celery import task

@task
def foo():
    pass
 _

3。

from celery import shared_task

@shared_task
def foo():
    pass
 _

1ndと3番目のものとの違いがshared_task具体的なアプリインスタンスがない場合は_が使用されます。誰かがそれを詳しく述べていて、2番目のものが使われているのはいつですか?

22
MOntu

セロリV3を使用していない限り、#2を使用しないでください。セロリV4を使用している場合は、#1を使用してください。

再利用可能なライブラリまたはDjango Appを書いているインスタンスで#3を使用してください。たとえば、セロリを使用してAWS EC2インスタンスを管理できるようにするタスクのオープンソースセットを書いている場合は、タスクがセロリで実行される可能性があるため、shared_taskを使用することができますが、その人に任せます。あなたのライブラリを使ってセロリを自分のために設定します。

あなたがあなた自身のプロジェクトのために書いているなら#1を使用し、再利用に懸念はありません。

5
2ps