RuntimeError: Event loop is closed 처리
SQLAlchemy Async를 사용하거나 Windows 환경에서 asyncio.run(main())을 실행시킬 때 RuntimeError: Event loop is closed 에러를 마주칠 때가 있다. 아래와 같은 방법으로 해결할 수 있는 지 체크해보자.
SQLAlchemy Async (aiomysql) 사용시 에러 처리
engine을 engine과 관련된 처리가 끝났을 때나 프로그램이 Exit할 때 dispose 시켜줘야 한다.
# engine 선언 - 다른 파일에 있을 수 있다.
engine = create_async_engine(
DB_URL,
future=True,
echo=True,
pool_size=mysql_cfg.pool_size,
pool_recycle=mysql_cfg.pool_recycle
)
# 아래를 프로그램 Exit할 때나 engine 관련 처리를 다 마친 후 실행
await engine.dispose()
Windows 환경
Windows에서는 EventLoopPolicy와 문제가 있는 것 같다. 아래의 코드를 삽입함으로 해결할 수 있다.
# 아래 코드 삽입
syncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())
Leave a Comment