By design asyncio does not allow its event loop to be nested. This
presents a practical problem: When in an environment where the event
loop is already running it's impossible to run tasks and wait for the
result. Trying to do so will give the error "RuntimeError: This event
loop is already running".

The issue pops up in various environments, such as web servers, GUI
applications and in Jupyter notebooks.

This module patches asyncio to allow nested use of asyncio.run and
loop.run_until_complete.
