feat: Semaine 9
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# exo 5
|
||||
import asyncio
|
||||
import time
|
||||
|
||||
SERVICES = [
|
||||
{"nom": "base de données", "delai": 0.3},
|
||||
{"nom": "cache Redis", "delai": 0.1},
|
||||
{"nom": "API externe", "delai": 3.5},
|
||||
{"nom": "serveur mail", "delai": 0.8},
|
||||
{"nom": "CDN", "delai": 1.5},
|
||||
]
|
||||
TIMEOUT = 2.0
|
||||
|
||||
async def check(service):
|
||||
nom, delai = service["nom"], service["delai"]
|
||||
debut = time.time()
|
||||
try:
|
||||
await asyncio.wait_for(asyncio.sleep(delai), timeout=TIMEOUT)
|
||||
return nom, True, time.time() - debut
|
||||
except asyncio.TimeoutError:
|
||||
return nom, False, TIMEOUT
|
||||
|
||||
async def main():
|
||||
start = time.time()
|
||||
taches = [asyncio.create_task(check(s)) for s in SERVICES]
|
||||
|
||||
en_ligne, hors_ligne = 0, 0
|
||||
for tache in asyncio.as_completed(taches):
|
||||
nom, ok, duree = await tache
|
||||
if ok:
|
||||
print(f"✓ {nom:<20} EN LIGNE ({duree:.2f}s)")
|
||||
en_ligne += 1
|
||||
else:
|
||||
print(f"✗ {nom:<20} HORS LIGNE (timeout {duree:.1f}s)")
|
||||
hors_ligne += 1
|
||||
|
||||
total = time.time() - start
|
||||
print(f"\nRésumé : {en_ligne} en ligne, {hors_ligne} hors ligne — temps total {total:.2f}s")
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user