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