タスクから生成されたリストをセロリの別のタスクにマップする最良の方法に関するアドバイスを探しています。
parse
PDF ドキュメントを解析し、ページのリストを出力するというタスクがあるとします。次に、各ページを という別のタスクに個別に渡す必要がありますfeed
。これはすべて、というタスクの中に入る必要がありますprocess
だから、私がそれを行うことができる1つの方法はこれです:
@celery.task
def process:
pages = parse.s(path_to_pdf).get()
feed.map(pages)
もちろん、私はget()
タスク内で呼び出しているので、それは良い考えではありません。
さらに、私のparse
タスクはジェネレーター関数にラップされ、ページを生成できるため、これは非効率的です。つまり、最後のページがパーサーによって生成される前に、フィードのために最初のページをキューに入れることができるはずです。
別の可能性はこれを行うことです:
@celery.task
def process:
for page in parse.s(path_to_pdf).get():
feed.delay(page)
get()
ただし、その例にはまだタスク内での呼び出しが含まれています。さらに、この例は単純化しすぎており、すべてのページがフィードされた後 (つまり a で) いくつかのことを行う必要がありますchord
。
セロリでこれを行うための最適な方法を探しています。アドバイスをいただければ幸いです。
ありがとう!