Три способа выполнить множество задач с asyncio
Функция для примера:
async def do_it(n):
await asyncio.sleep(random.uniform(0.5, 1))
return n
1. Последовательный вызов
async def main():
for i in range(100):
result = await do_it(i)
Такой вызов имеет смысл только тогда, когда результат одной задачи требуется для вызова следующей.
Если они независимы, то это антипаттерн, так как аналогичен простому синхронному вызову по очереди.
2. Упорядоченный результат
async def main():
tasks = [do_it(i) for i in range(100)]
results = await asyncio.gather(*tasks)
Выполняет корутины конкурентно и возвращает результат в виде списка.
Полезен когда требуется получить результаты в том же порядке в котором задачи отправлены.
3. Результат по мере готовности
tasks = [asyncio.create_task(do_it(i)) for i in range(100)]
for cor in asyncio.as_completed(tasks):
result = await cor
Так же выполняет корутины конкурентно, но не гарантирует порядок. Результат возвращается по мере готовности, каждый отдельно.
Полезен когда нужно обработать любой ответ как можно скорее.
#async
Год назад одно казахстанское интернет-издание выпустило материал с конкретным заголовком: "Строительство АЭС в Казахстане: как вывести из игры "Росатом"? Подобных материалов про американских, французских и прочих подрядчиков до сих пор нет. Что уже наводит на подозрения разного рода. Например, кому-то очень нужно, чтобы АЭС не строил "Росатом".
Но кому? Чтобы ответить на этот вопрос, вспомним недавнее прошлое. В 2017 году японская компания Toshiba купила одного из главных конкурентов "Росатома" - обанкротившуюся американскую компанию Westinghouse Electric. Японской компанией WE была недолго: в апреле 2018 года ее выкупил холдинг из Канады Brookfield Business Partners (BBP).
Теперь конкурентом российских атомщиков является "дочка" BBP — компания Brookfield Infrastructure (BI). Другой главный конкурент "Росатома" - французская компания Orano (бывшая Areva).
В том же 2018 году произошла еще одна любопытная сделка.
Подробности на сайте cronos.asia
#АЭС
#Росатом
#BBP
#Казахстан