Ich versuche, eine Reihe von Anfragen (~ 1000) mit Asyncio und der aiohttp-Bibliothek zu machen, aber ich stoße auf ein Problem, dass ich nicht viele Informationen finden kann.Asyncio RuntimeError: Ereignisschleife ist geschlossen
Wenn ich diesen Code mit 10 URLs ausführen, läuft es gut. Wenn ich es mit 100+ URLs starte, bricht es und gibt mir RuntimeError: Event loop is closed
Fehler.
import asyncio
import aiohttp
@asyncio.coroutine
def get_status(url):
code = '000'
try:
res = yield from asyncio.wait_for(aiohttp.request('GET', url), 4)
code = res.status
res.close()
except Exception as e:
print(e)
print(code)
if __name__ == "__main__":
urls = ['https://google.com/'] * 100
coros = [asyncio.Task(get_status(url)) for url in urls]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(coros))
loop.close()
Der Stack-Trace kann here finden.
Jede Hilfe oder Einsicht würde sehr geschätzt werden, da ich seit ein paar Stunden meinen Kopf darüber hämmere. Offensichtlich würde dies bedeuten, dass eine Ereignisschleife geschlossen wurde, die noch offen sein sollte, aber ich sehe nicht, wie das möglich ist.
ist nicht 'Asyncio' Fehler
Bevor Sie Ihr Programm beenden. Python rekursiver Fehler, Limit erreicht. Need-Thread für alle Nicht-Klasse-Funktion ... – dsgdfg
Stellen Sie zuerst sicher, dass Sie die neueste aiohttp-Version verwenden. Ich nehme an, Sie tun. Technisch aiohttp benötigt eine Schleife Iteration nach Abschluss der Anfrage zum Schließen zugrunde liegenden Sockets. Fügen Sie 'loop.run_until_complete (asyncio.sleep (0))' vor 'loop.close()' ein. –
Ihr Traceback schlägt vor, dass ein Job an einen [Executor] (https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.Executor) über [run_in_executor] (https: // docs .python.org/3/library/asyncio-eventloop.html # asyncio.BaseEventLoop.run_in_executor) zurückgegeben, nachdem die Schleife geschlossen wurde. Seltsamerweise [aiohttp] (https://github.com/KeepSafe/aiohttp/search?utf8=%E2%9C%93&q=run_in_executor&type=Code) und [asyncio] (https://github.com/python/asyncio/Suche? utf8 =% E2% 9C% 93 & q = run_in_executor) nicht 'run_in_executor' verwenden ... – Vincent