最近、プロジェクトの 1 つに統合する必要があるため、セロリと昆布のドキュメントを調べています。これがどのように機能するかについての基本的な理解はありますが、さまざまなブローカーを使用したドキュメントの例では混乱しています。
シナリオは次のとおりです。
私のアプリケーション内には 2 つのビューがViewA
あり、ViewB
どちらも高価な処理を行うため、処理にセロリ タスクを使用する必要がありました。これが私がしたことです。
ビュー.py
def ViewA(request):
tasks.do_task_a.apply_async(args=[a, b])
def ViewB(request):
tasks.do_task_b.apply_async(args=[a, b])
タスク.py
@task()
def do_task_a(a, b):
# Do something Expensive
@task()
def do_task_b(a, b):
# Do something Expensive here too
これまでのところ、すべてが正常に機能しています。問題は、システム上にファイルをdo_task_a
作成することです。今、メソッドでファイルの存在を確認し、ファイルが存在しない場合はタスクメソッドを呼び出すことができます[これは私が今行っていることです]。txt
do_task_b
do_task_b
retry
ここでは、むしろ別のアプローチを取りたいと思います (つまり、メッセージングの出番です)。ファイルが作成されるまで再試行メソッドをループするのではなく、ファイルが作成されたらdo_task_a
メッセージを送信したいと思います。do_task_b
のドキュメントを読み、celery
次kombu
のように設定を更新しました。
BROKER_URL = "django://"
CELERY_RESULT_BACKEND = "database"
CELERY_RESULT_DBURI = "sqlite:///celery"
TASK_RETRY_DELAY = 30 #Define Time in Seconds
DATABASE_ROUTERS = ['portal.db_routers.CeleryRouter']
CELERY_QUEUES = (
Queue('filecreation', exchange=exchanges.genex, routing_key='file.create'),
)
CELERY_ROUTES = ('celeryconf.routers.CeleryTaskRouter',)
そして私はここで立ち往生しています。ここからどこへ行けばいいのかわからない。
ファイル作成時にdo_task_a
メッセージをブロードキャストするには、次に何をすればよいですか? メッセージを受信 (消費) し、コードをさらに処理するdo_task_b
にはどうすればよいですか??do_task_b
アイデアや提案は大歓迎です。