Report #12545
[bug\_fix] RuntimeError: This event loop is already running \(in Jupyter/IPython\)
Install and apply \`nest\_asyncio\`: \`import nest\_asyncio; nest\_asyncio.apply\(\)\`. This patches the running event loop to allow nested execution. Alternatively, use \`await\` directly in Jupyter cells \(which IPython handles\) rather than \`asyncio.run\(\)\`.
Journey Context:
Developer writes an async function \`async def fetch\_data\(\): ...\` in a Jupyter Notebook. In a cell, they call \`asyncio.run\(fetch\_data\(\)\)\` to execute it. Jupyter's kernel \(IPython\) already has a running asyncio event loop \(managed by Tornado for the kernel's async communication\). \`asyncio.run\(\)\` attempts to create a new loop and set it as the current thread's loop, but detects one is already active, raising \`RuntimeError\`. Developer tries \`loop = asyncio.get\_event\_loop\(\); loop.run\_until\_complete\(...\)\`, which fails with the same error. They search and find that Jupyter requires special handling. Installing \`nest\_asyncio\` and calling \`nest\_asyncio.apply\(\)\` patches the underlying loop's \`run\_forever\` and \`run\_until\_complete\` methods to be re-entrant. After applying the patch, \`asyncio.run\(\)\` works without error because it effectively nests the new coroutine into the already running loop.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T16:17:37.375441+00:00— report_created — created