私がこのような非常に単純なタスクを持っているとしましょう:
@celery.task(ignore_result=True)
def print_page(page):
with open('path/to/page','w') as f:
f.write(page)
(上記のコードの潜在的な競合状態は無視してください...これは単純化された例です)
私の質問は、次の2つのコードサンプルが同じ結果を生成するかどうか、または一方が他方よりも優れているかどうかです。
選択肢A:
@celery.task(ignore_result=True)
def print_pages(page_generator):
for page in page_generator:
print_page.s(page).apply_async()
選択肢B:
@celery.task(ignore_result=True)
def print_pages(page_generator):
g = group(print_page.s(page) for page in page_generator)
g.apply_async()
そして、一般的に、私は上記が私がしていることをする正しい方法であるかどうか興味があります。基本的に、いくつかのデータを解析し、ドキュメントのすべてのページを出力するジェネレーターを返す別のタスクがあります。ページごとに分けて出力したい。
したがって、私のチェーンは次のようになります(これも簡略化されています)。
chain = fetch.s(url) | parse.s() | print_pages.s()
chain()
どういうわけか、そのチェーン内とそこにあるグループ(実際のタスクの外)でジェネレーターを放出できれば、もっと理にかなっていると思います。しかし、それが実用的か理想的かはわかりません。助けていただければ幸いです。ありがとう!