Виграш у часі виконання за рахунок одночасного очікування відповідей. asyncio.gather
import time
import asyncio
import httpx
# Ключ від безкоштовного апі https://app.reqres.in
API_KEY = "free_user_****************"
async def main():
async with httpx.AsyncClient() as client:
client.headers["x-api-key"] = API_KEY
start = time.monotonic()
responses = await asyncio.gather(
client.get("https://reqres.in/api/users?delay=1"), # запит 1с
client.get("https://reqres.in/api/users?delay=3"), # запит 3с
client.get("https://reqres.in/api/users?delay=2"), # запит 2с
)
print(f"Elapsed: {time.monotonic() - start:.2f} s")
print("Status codes: ", [r.status_code for r in responses])
if __name__ == "__main__":
asyncio.run(main())
Вивід:
Elapsed: 3.30 s
Status codes: [200, 200, 200]
API app.reqres.in дозволяє задати час відповіді для кожного запиту (1, 3 та 2 с). Це дає можливість побачити перевагу асинхронності, коли запити виконуються групою й відповіді очікуються одночасно.
Якби ми робили запити послідовно, час виконання становив би 1 + 3 + 2 = ~6 с. Проте завдяки асинхронності ми досягли результату ~3,3 с, що співмірне з часом найдовшого запиту.
#asyncio #gather
381 · 消息Виграш у часі виконання за рахунок одночасного очікування відповідей. asyncio.gather
2026年8月3日信息流中的邻近内容
P这条消息
P