I am trying to learn to use asyncio in Python to optimize scripts. My example returns a coroutine was never awaited warning, can you help to understand and find how to solve it?
import time import datetime import random import asyncio import aiohttp import requests def requete_bloquante(num): print(f'Get {num}') uid = requests.get("https://httpbin.org/uuid").json()['uuid'] print(f"Res {num}: {uid}") def faire_toutes_les_requetes(): for x in range(10): requete_bloquante(x) print("Bloquant : ") start = datetime.datetime.now() faire_toutes_les_requetes() exec_time = (datetime.datetime.now() - start).seconds print(f"Pour faire 10 requêtes, ça prend {exec_time}s\n") async def requete_sans_bloquer(num, session): print(f'Get {num}') async with session.get("https://httpbin.org/uuid") as response: uid = (await response.json()['uuid']) print(f"Res {num}: {uid}") async def faire_toutes_les_requetes_sans_bloquer(): loop = asyncio.get_event_loop() with aiohttp.ClientSession() as session: futures = [requete_sans_bloquer(x, session) for x in range(10)] loop.run_until_complete(asyncio.gather(*futures)) loop.close() print("Fin de la boucle !") print("Non bloquant : ") start = datetime.datetime.now() faire_toutes_les_requetes_sans_bloquer() exec_time = (datetime.datetime.now() - start).seconds print(f"Pour faire 10 requêtes, ça prend {exec_time}s\n") The first classic part of the code runs correctly, but the second half only produces:
synchronicite.py:43: RuntimeWarning: coroutine 'faire_toutes_les_requetes_sans_bloquer' was never awaited
faire_toutes_les_requetes_sans_bloquer()at the end of your module? That call creates the awaitable object (a coroutine), but you neverawaiton it.