Лучший способ сопоставить сгенерированный список с задачей в сельдерее
Я ищу несколько советов о том, как лучше сопоставить список, созданный из задачи, с другой задачей в сельдерее.
Допустим, у меня есть задача под названием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
).
Я ищу наиболее оптимальный способ сделать это в сельдерее. Буду признателен за любой совет.
Спасибо!