Report #4641
[bug\_fix] RuntimeError: This event loop is already running in Jupyter/IPython
Use \`await\` directly in the notebook cell \(IPython's autoawait feature\), or install and apply \`nest\_asyncio\` to allow nested loops.
Journey Context:
Data scientist opens a Jupyter Notebook to test an async HTTP client. They write a cell: \`import asyncio; import aiohttp; asyncio.run\(main\(\)\)\`. When executed, it raises \`RuntimeError: This event loop is already running\`. The user is confused because the same code works in a \`.py\` file. They discover that Jupyter \(via IPython\) already runs an asyncio event loop in the main thread to handle kernel communications and top-level \`await\` expressions. Calling \`asyncio.run\(\)\` attempts to create a new event loop and set it as the current thread's loop, which is prohibited when a loop is already active. The fix is to leverage IPython's autoawait feature: simply putting \`await main\(\)\` in the cell works because IPython compiles the cell to run in the existing loop. Alternatively, for libraries that require \`asyncio.run\`, one can use \`nest\_asyncio.apply\(\)\` to patch the loop to allow re-entrant execution.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:49:40.138342+00:00— report_created — created