假设我有一个非常简单的任务,如下所示:
@celery.task(ignore_result=True)
def print_page(page):
with open('path/to/page','w') as f:
f.write(page)
(请忽略上述代码中潜在的竞争条件......这是一个简化的例子)
我的问题是以下两个代码示例是否会产生相同的结果,或者一个是否比另一个更好:
选项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()
我认为如果我能以某种方式在该链内和那里的组(在实际任务之外)发出生成器,那将更有意义。但我不确定这是否实用或理想。我真的很感激任何帮助。谢谢!