본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 071. RuntimeError - Event loop is closed

by about_IT 2025. 5. 30.
728x90

RuntimeError: Event loop is closed 오류는 비동기 프로그래밍에서 asyncio의 이벤트 루프가 이미 종료된 상태에서 다시 사용하려고 할 때 발생합니다. 이 오류는 주로 asyncio.run() 이후에 다시 이벤트 루프를 사용하려고 하거나, 루프가 강제로 닫힌 후에도 접근하려 할 때 나타납니다.

특히 Jupyter Notebook이나 여러 번 실행되는 스크립트 환경에서는 이벤트 루프가 닫힌 상태에서 await 또는 loop.run_until_complete() 등을 호출하면 이 오류가 발생할 수 있습니다.

● 오류 발생 예시

import asyncio
loop = asyncio.get_event_loop()
loop.close()
loop.run_until_complete(asyncio.sleep(1))

이벤트 루프를 닫은 후 다시 실행하려 했기 때문에 RuntimeError가 발생합니다.

RuntimeError: Event loop is closed

● 해결 방법

  • asyncio.run()은 한 번만 실행하도록 설계
  • 루프가 닫혔는지 확인하고 필요시 새 루프 생성
  • Jupyter에서는 nest_asyncio 등으로 루프 중첩 허용 가능

● 예시 코드 (정상 사용)

import asyncio

async def main():
    await asyncio.sleep(1)

asyncio.run(main())

● 자주 하는 실수

  • 같은 루프를 여러 번 실행하려고 시도
  • 루프를 닫아놓고도 재사용하려 함
  • Jupyter에서 asyncio 코드 반복 실행

● 결론

RuntimeError - Event loop is closed 오류는 asyncio 이벤트 루프가 이미 닫힌 상태에서 접근할 때 발생합니다. 이벤트 루프는 한 번만 실행되도록 설계되었으므로, 상태 관리와 실행 환경에 주의하여 비동기 코드를 작성해야 합니다.

728x90