Три способа выполнить множество задач с 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
🍎❌ Edwin Díaz ha renunciado oficialmente a los dos últimos años garantizados y a los $38 millones de dólares restantes de su contrato.
✅ Ahora es agente libre.
📺 Anthony DiComo & MLB on FOX.
#️⃣#EDíaz
🗞 | t.me/MLB_Daily
🚨 Edwin Díaz ha sido vinculado con peleas de gallos ilegales en Puerto Rico, según USA TODAY.
🚨 La pena máxima para los participantes en una pelea de gallos es de cinco años de prisión y una multa.
#Dodgers#EDíaz
🗞 | t.me/MLB_Daily
🔵🏥 Los Dodgers anunciaron que Edwin Díaz será operado el miércoles para extraer los cuerpos sueltos en su codo derecho y se espera que regrese en la segunda mitad de la temporada.
#Dodgers#EDíaz
🗞 | t.me/MLB_Daily
💥 ÚLTIMA HORA 🛰🍎: Los Dodgers y el agente libre Edwin Diaz han llegado a un acuerdo por 3 años y 69 millones, según Will Sammon de The Athletic.
#️⃣#Dodgers#EDíaz
🗞 | t.me/MLB_Daily
🍎 Los Mets todavía están interesados en Edwin Díaz incluso después de su supuesta contratación de Devin Williams según informes 👀
#️⃣#Mets#EDíaz
🗞 | t.me/MLB_Daily
🇵🇷🍎 Se ha confirmado que Edwin Díaz será el cerrador de Puerto Rico en el Clásico Mundial de Béisbol, según @primerahora.
#️⃣#TeamPuertoRico#EDíaz#WBC26
🗞 | t.me/MLB_Daily