【发布时间】:2013-04-30 03:35:02
【问题描述】:
我正在寻找一些关于将任务生成的列表映射到 celery 中的另一个任务的最佳方法的建议。
假设我有一个名为parse 的任务,它解析一个PDF 文档并输出一个页面列表。然后,每个页面都需要单独传递给另一个名为 feed 的任务。这一切都需要进入一个名为process的任务中
所以,我可以这样做的一种方法是:
@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()。另外,这个例子过于简单化了,我真的需要在所有页面都被输入之后做一些事情(即在chord中)。
我正在寻找在 celery 中执行此操作的最佳方法。如有任何建议,我将不胜感激。
谢谢!
【问题讨论】:
标签: celery celery-task celeryd