Три способа выполнить множество задач с 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
《原神》第二张挪德卡莱篇OST《朔望凝待之庭》现已正式上线
亲爱的旅行者,《原神》第二张挪德卡莱篇OST《朔望凝待之庭 Where Roads Are Pledged to Cross》现已正式上线。
欢迎旅行者前往下列平台,收听完整版OST。
>>>点击前往QQ音乐收听<<<
>>>点击前往酷狗音乐收听<<<
>>>点击前往Apple Music收听<<<
专辑分为《霜尽春归 Nordic Spring》、《早至的黎明 Tidig Gryning》与《未亡者的悼亡 Requiem for the Living》3张分碟,共收录73首由HOYO-MiX音乐团队为《原神》挪德卡莱地区创作的原声音乐。
source@YuanShen#OST
С раннего возраста безумно люблю академический (да и не только) авангард, потому саундтрек «Битвы за битвой» в моем плейлисте со дня премьеры. Невероятная динамика. Очень надеюсь на Оскар для композитора.
#ost