83 votes

La boucle d'événement Asyncio est fermée

Lorsque vous essayez d'exécuter l'exemple de code asyncio hello world donné dans la documentation:

 import asyncio

async def hello_world():
    print("Hello World!")

loop = asyncio.get_event_loop()
# Blocking call which returns when the hello_world() coroutine is done
loop.run_until_complete(hello_world())
loop.close()
 

Je reçois l'erreur:

 RuntimeError: Event loop is closed
 

J'utilise python 3.5.3.

100voto

Martijn Pieters Points 271458

Vous avez déjà appelé loop.close() avant l'exécution de cet échantillon morceau de code sur l'événement mondial de la boucle:

>>> import asyncio
>>> asyncio.get_event_loop().close()
>>> asyncio.get_event_loop().is_closed()
True
>>> asyncio.get_event_loop().run_until_complete(asyncio.sleep(1))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../lib/python3.6/asyncio/base_events.py", line 443, in run_until_complete
    self._check_closed()
  File "/.../lib/python3.6/asyncio/base_events.py", line 357, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

Vous devez créer une nouvelle boucle:

loop = asyncio.new_event_loop()

Vous pouvez définir que comme la nouvelle boucle avec:

asyncio.set_event_loop(asyncio.new_event_loop())

puis il suffit d'utiliser asyncio.get_event_loop() de nouveau.

Sinon, suffit de redémarrer votre interpréteur Python, la première fois que vous essayez d'obtenir à l'événement mondial de la boucle de vous procurer un nouveau un nouveau, non fermées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X