Report #47112
[bug\_fix] RuntimeError: This event loop is already running in Jupyter/IPython
In Jupyter notebooks, use 'await' directly at the top level without 'asyncio.run\(\)'. For code that internally calls 'asyncio.run\(\)', apply 'nest\_asyncio' patch: 'import nest\_asyncio; nest\_asyncio.apply\(\)'. Alternatively, manually use 'asyncio.get\_event\_loop\(\).run\_until\_complete\(coro\(\)\)' instead of 'asyncio.run\(coro\(\)\)'. Root cause: Jupyter and IPython run on an underlying event loop \(Tornado/asyncio\) to handle kernel communication. 'asyncio.run\(\)' attempts to create a new loop and close it, which is forbidden when a loop is already active in the thread.
Journey Context:
Developer writes a web scraping script using 'asyncio.run\(main\(\)\)' which works perfectly in a .py file executed from terminal. They move to a Jupyter notebook to visualize results incrementally. They paste the async function and call 'asyncio.run\(fetch\_data\(\)\)'. Immediately hits 'RuntimeError: This event loop is already running'. They try to get the current loop with 'asyncio.get\_event\_loop\(\)' and call 'run\_until\_complete', but depending on Jupyter version this may also conflict. They search and find 'nest\_asyncio' library. After importing and applying the patch, their code works. They learn that Jupyter's kernel is fundamentally asynchronous, making 'run\(\)' inappropriate.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T09:33:04.980232+00:00— report_created — created