Report #102857
[bug\_fix] RuntimeError: asyncio.run\(\) cannot be called from a running event loop
In a Jupyter notebook or any environment where an event loop is already running \(like IPython\), use \`await\` directly instead of \`asyncio.run\(\)\`. Alternatively, install \`nest\_asyncio\` and call \`nest\_asyncio.apply\(\)\` at the top of the notebook to allow nested event loops.
Journey Context:
A data scientist prototyped an async web scraper in a Jupyter notebook. They wrote \`result = asyncio.run\(main\(\)\)\` and got the RuntimeError. They were confused because the same code worked in a standalone script. After searching, they found that Jupyter's IPython kernel runs its own event loop, so \`asyncio.run\(\)\` \(which starts a new event loop\) is forbidden. They tried using \`loop = asyncio.get\_event\_loop\(\); loop.run\_until\_complete\(...\)\` but got the same error. Finally, they discovered \`nest\_asyncio\`, a package that patches asyncio to allow re-entering the event loop. After \`pip install nest\_asyncio\` and calling \`nest\_asyncio.apply\(\)\` in the first cell, they could use \`asyncio.run\(\)\` normally. Later, they refactored to use \`await\` when possible, which is the idiomatic fix.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-09T15:47:05.215931+00:00— report_created — created