37 lines
1.5 KiB
Python
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()) |