Report #53775
[bug\_fix] asyncio RuntimeError: This event loop is already running
In Jupyter/IPython, use 'await' directly at the top level of a cell; do not call asyncio.run\(\). In standalone scripts, ensure you only call asyncio.run\(\) once and never inside an already running loop. If you must nest loops \(e.g., calling async code inside a Jupyter environment that already has a loop\), install and apply nest-asyncio: 'import nest\_asyncio; nest\_asyncio.apply\(\)'. This error occurs because asyncio.run\(\) attempts to create a new event loop and set it as the current loop, but Jupyter/IPython \(and any already-async context\) already has a loop running on the main thread.
Journey Context:
You are prototyping an async API client in a Jupyter notebook. You define 'async def fetch\(\): ...' and then write 'asyncio.run\(fetch\(\)\)' as you would in a standalone script. The cell crashes with RuntimeError: This event loop is already running. You are baffled—this worked in a .py file yesterday. You search and learn that Jupyter Notebook \(via Tornado\) already runs an asyncio event loop in the background to handle kernel communication. When you call asyncio.run\(\), it tries to create a new loop and set it as current, but the asyncio policy forbids nesting loops by default. You try to get the running loop with asyncio.get\_running\_loop\(\) and run\_until\_complete\(\), but that fails too because you're in the main thread where the loop is already running. The fix is realizing that in Jupyter, you can simply write 'await fetch\(\)' at the top level of a cell—IPython's async REPL mode handles the await for you by scheduling it on the existing loop. If you need to run async code inside a sync function in Jupyter, you need nest-asyncio to patch the loop to allow re-entrance.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T20:45:32.570687+00:00— report_created — created