Problema
Mientras intentas ejecutar una función async def usando asyncio.run_until_complete(), p. ej.
asyncio_example.py
import asyncio
asyncio.get_event_loop().run_until_complete(asyncio.sleep(1))ves un mensaje de error como
asyncio_runtimeerror_example.txt
Cell In[3], line 15
12 raise
14 # Usage example:
---> 15 asyncio.get_event_loop().run_until_complete(asyncio.sleep(1))
File /usr/lib/python3.12/asyncio/base_events.py:663, in BaseEventLoop.run_until_complete(self, future)
652 """Run until the Future is done.
653
654 If the argument is a coroutine, it is wrapped in a Task.
(...)
660 Return the Future's result, or raise its exception.
661 """
662 self._check_closed()
--> 663 self._check_running()
665 new_task = not futures.isfuture(future)
666 future = tasks.ensure_future(future, loop=self)
File /usr/lib/python3.12/asyncio/base_events.py:622, in BaseEventLoop._check_running(self)
620 def _check_running(self):
621 if self.is_running():
--> 622 raise RuntimeError('This event loop is already running')
623 if events._get_running_loop() is not None:
624 raise RuntimeError(
625 'Cannot run the event loop while another loop is running')
RuntimeError: This event loop is already runningSolución
En lugar de usar loop.run_until_complete(), usa asyncio.create_task() para ejecutar la corrutina:
asyncio_create_task.py
future = asyncio.get_event_loop().create_task(asyncio.sleep(1))Opcionalmente, puedes hacer await del future para esperar a que la corrutina termine:
asyncio_await_future.py
await futureLa razón para esto es que loop.run_until_complete() está diseñado para código sincrónico y siempre iniciará el loop, por lo tanto fallará si el loop ya está ejecutándose.
Típicamente, este error ocurre si estás ejecutando código desde un contexto como un Jupyter Notebook, que inicia un event loop internamente. Podrías necesitar cambiar tu código si quieres ejecutarlo en otro contexto como un script de Python puro.
Echa un vistazo a artículos similares por categoría:
Python
Si este artículo te ha ayudado, considera invitarme a un café o hacer una donación vía PayPal para apoyar la investigación y publicación de nuevos artículos en TechOverflow