Три способа выполнить множество задач с 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
#HappyEaster from all of us at the Nigeria Centre for Disease Control and Prevention.
May this day fill you and your loved ones with joy, happiness, and renewed health.
Let's celebrate the gift of hope and good health as we strive towards healthy living.
The Nigeria Centre for Disease Control and Prevention (NCDC) wishes you a joyful and peaceful Easter. ✝️
As we celebrate this season of hope, renewal, and new beginnings, we are reminded of the importance of protecting our health and the wellbeing of those around us.
While you spend time with loved ones, remember to practice good hygiene, stay informed, and make choices that keep our communities safe.✅
May this Easter bring you renewed strength, happiness, and good health.
Stay safe, stay informed, and enjoy the season. 🌿
#HappyEaster#StayHealthy#NCDCNigeria