Files
live-campus-mcs-p-2027.2/Semaine_09/Asyncio_examples/chaining.py
T
gauvainboiche ce1f0e513a feat: Semaine 9
2026-05-15 16:24:56 +02:00

37 lines
1.5 KiB
Python

import random, asyncio, time
async def fetch_posts(user):
delay = random.uniform(0.5, 2.0)
print(f"Post coroutine : récupération des postes pour l'utilisateur {user["name"]}.")
await asyncio.sleep(delay)
posts = [f"Post {i} par l'utilisateur {user["name"]}" for i in range (1, 3)]
print(f"Post coroutine : récupération de {len(posts)} posts pour l'utilisateur {user["name"]} - delay : {delay:.2f}s.")
for post in posts:
print(f"--- {post} ---")
async def fetch_user(user_id):
delay = random.uniform(0.5, 2.0)
print(f"Utilisateur coroutine : récupération de l'utilisateur {user_id=}.") # En mettant le = à la fin, il va écrire user_id=[valeur]
await asyncio.sleep(delay)
user = {"id": user_id, "name": f"User{user_id}"}
print(f"Utilisateur coroutine : récupération de l'utilisateur {user_id=} - delay : {delay:.2f}s.")
return user
async def get_user_with_posts(user_id):
user = await fetch_user(user_id)
await fetch_posts(user)
async def main():
user_ids = [1,2,3]
start = time.perf_counter()
await asyncio.gather(
# liste de compréhension. Dans un tuple, elle donne un "Générateur".
# L'étoile fait donner l'instruction pour autant d'éléments que
# nécessaire
*(get_user_with_posts(user_id) for user_id in user_ids)
)
print(f"Temps total d'exécution : {time.perf_counter() - start:.2f}s.")
if __name__ == "__main__":
random.seed(444)
asyncio.run(main())