python runtime_error ai_generated true

RuntimeError: Event loop is closed

ID: python/asyncio-event-loop-closed

Also available as: JSON · Markdown · 中文
80%Fix Rate
85%Confidence
0Evidence
2024-02-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
3.8 active
3.9 active
3.10 active
3.11 active

Root Cause

Attempting to use an asyncio event loop after it has been explicitly closed, often due to calling loop.close() prematurely or reusing a loop after shutdown.

generic

中文

在事件循环已被显式关闭后尝试使用它,通常是因为过早调用 loop.close() 或在关闭后重用循环。

Workarounds

  1. 95% success Use asyncio.run() for top-level entry point to avoid manual loop management
    async def main(): await some_coroutine(); asyncio.run(main())
  2. 85% success Check if loop is closed before using it, and create a new one if needed
    if loop.is_closed(): loop = asyncio.new_event_loop(); asyncio.set_event_loop(loop)

Dead Ends

Common approaches that don't work:

  1. Recreating the loop with asyncio.new_event_loop() without setting it as current 70% fail

    The new loop is not set as the current loop, so asyncio.get_event_loop() still returns a closed loop.

  2. Ignoring the error and continuing execution 90% fail

    The closed loop cannot process coroutines, leading to hangs or crashes later.

  3. Using loop.run_forever() after loop.close() 100% fail

    A closed loop cannot be restarted; run_forever() raises RuntimeError.