Report #68851
[bug\_fix] RuntimeError: asyncio.run\(\) cannot be called from a running event loop in Jupyter/IPython
Use \`await\` directly in the Jupyter cell if the object is awaitable, or install and use \`nest\_asyncio\` by running \`import nest\_asyncio; nest\_asyncio.apply\(\)\` at the top of the notebook. The root cause is that Jupyter/IPython already runs an event loop in the kernel thread to handle async cell execution \(since IPython 7.0\); calling \`asyncio.run\(\)\` tries to create a new loop and set it as the running loop, which Python forbids to prevent nested loops.
Journey Context:
Developer copies a standalone async script into a Jupyter notebook cell. The script contains \`asyncio.run\(main\(\)\)\`. Executing the cell throws 'cannot be called from a running event loop'. Developer tries to use \`await main\(\)\` instead, which works in Jupyter but then fails if they later try to run the same code as a script. They search and discover that Jupyter's kernel is fundamentally different from a standard Python script; it maintains a persistent async loop to support top-level await \(autoawait\). The library \`nest\_asyncio\` patches the asyncio library to allow nested loops by essentially reusing the existing loop instead of trying to create a new one, making \`asyncio.run\(\)\` work inside Jupyter.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T22:03:01.107391+00:00— report_created — created