J'ai du mal à comprendre pourquoi je reçois l'erreur "RuntimeError : This event loop is already running". J'ai essayé d'exécuter des bouts de code de " https://aiohttp.readthedocs.io/en/stable/ "Cependant, je rencontre toujours le même problème.
Extrait de code du tutoriel :
import aiohttp
import asyncio
import async_timeout
async def fetch(session, url):
async with async_timeout.timeout(10):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
html = await fetch(session, 'http://python.org')
print(html)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
RÉSULTATS de l'extrait du tutoriel (en exécutant le code à partir de l'IDE spyder) :
RuntimeError : Cette boucle d'événement est déjà en cours d'exécution
<!doctype html>"
... (plus d'html)
Extrait de code personnel (ne provenant pas du tutoriel référencé ci-dessus) :
import aiohttp
import asyncio
import time
urls = ['https://api.robinhood.com/quotes/c4f6720a-0364-4e7b-8c41-705696759e1a/']
async def fetch(client, url):
async with client.request('get', url) as response:
if response.status == 200:
data = await response.text()
else:
data = []
print(data)
return(data)
async def get_async_urls(urls):
async with aiohttp.ClientSession() as client:
return await asyncio.gather(*(fetch(client, url) for url in urls))
if __name__ == '__main__':
t0 = time.time()
loop = asyncio.get_event_loop()
results = loop.run_until_complete(get_async_urls(urls))
print(results)
t1 = time.time()
total_time = t1-t0
loop.close()
RÉSULTATS de l'extrait personnel (en exécutant le code de l'IDE Spyder) :
RuntimeError : Cette boucle d'événement est déjà en cours d'exécution
{"ask_price":"14.9000","ask_size":100,"bid_price":"14.0100","bid_size":100,"last_trade_price":"14.7900","last_extended_hours_trade_price":"14.7900","previous_close":"14.3600","adjusted_previous_close":"14. 3600","previous_close_date":"2018-05-07","symbol":"SURF","trading_halted":false,"has_traded":true,"last_trade_price_source":"consolidated","updated_at":"2018-05-08T20:01:21Z","instrument":" https://api.robinhood.com/instruments/43d56335-f2f6-4711-b650-55be2396f814/ "}
RÉSULTATS du snippet personnel (en exécutant depuis cmd "python personal_snippet.py") :
{"ask_price":"14.9000","ask_size":100,"bid_price":"14.0100","bid_size":100,"last_trade_price":"14.7900","last_extended_hours_trade_price":"14.7900","previous_close":"14.3600","adjusted_previous_close":"14. 3600","previous_close_date":"2018-05-07","symbol":"SURF","trading_halted":false,"has_traded":true,"last_trade_price_source":"consolidated","updated_at":"2018-05-08T20:01:21Z","instrument":" https://api.robinhood.com/instruments/43d56335-f2f6-4711-b650-55be2396f814/ "} ['{"ask_price":"14.9000","ask_size":100,"bid_price":"14.0100","bid_size":100,"last_trade_price":"14.7900","last_extended_hours_trade_price":"14.7900","previous_close":"14.3600","adjusted_previous_close":"14. 3600","previous_close_date":"2018-05-07","symbol":"SURF","trading_halted":false,"has_traded":true,"last_trade_price_source":"consolidated","updated_at":"2018-05-08T20:01:21Z","instrument":" https://api.robinhood.com/instruments/43d56335-f2f6-4711-b650-55be2396f814/ "}']
Les résultats ci-dessus semblent indiquer que le problème est lié à l'IDE Spyder.
J'ai deux questions :
-
Pourquoi est-ce que je reçois cette erreur ? Il semble que d'autres personnes n'obtiennent pas cette erreur en exécutant le code du tutoriel. (Réponses possibles : BUG POSSIBLE DANS SPYDER3)
Cela semble se produire uniquement dans l'IDE spyder. J'ai exécuté les deux bouts de code à partir de l'invite cmd et aucune erreur n'est apparue. Merci à @MikhailGerasimov pour la suggestion.
-
Étant donné que j'ai deux commandes d'impression (dans le deuxième extrait de code) et qu'un seul ensemble de "données" a été imprimé, alors pourquoi les données ne sont pas renvoyées à l'appel original (results = loop.run_until_complete(get_async_urls(urls)))) (Réponses possibles : BUG POSSIBLE DANS SPYDER3)
Cela semble se produire uniquement dans l'IDE de Spyder. J'ai exécuté le deuxième extrait de code à partir de l'invite cmd et les deux impressions sont apparues. Merci à @MikhailGerasimov pour la suggestion.
LES DEUX QUESTIONS ONT (probablement) ÉTÉ RÉPONDUES. Je ferai référence à cette question lorsque je soumettrai un problème à spyder IDE. Je continuerai à mettre à jour cette question au fur et à mesure que les choses évoluent du côté de Spyder. S'ils reviennent et disent que le problème ne vient pas d'eux, alors je rouvrirai les questions dans un format légèrement différent.
Merci pour votre aide !
Lien vers la soumission du problème référencé dans le github de Spyder IDE : https://github.com/spyder-ide/spyder/issues/7096