python 3.8 RuntimeError: Event loop is closed

2020. 11. 15. 23:40Trouble Shooting

728x90

python 3.8 이후부터 windows에서 async 한 개발을 하면 정상 동작을 하였음에도 불구하고 

다음과 같은 오류가 나타납니다.

 

RuntimeError: Event loop is closed

 

이러한 이슈로 많은 사람들이 해결책을 찾기 위해

aiohttp가 아닌 httpx를 사용을 권장하지만 근본적인 해결책은 되지 않는 것 같습니다.

이유는 미세까진아니고 조금 체감이 될 정도로 httpx.AsyncClient()가 aiohttp보다 느리게 체감됩니다.

 

해당 이슈를 해결하기 위한 해결책으로 baysul 이라는 유저가 다음과 같은 내용을 제시했는데

window를 사용함과 동시에 Python이 3.8 이상일 때 발생하는 현상으로

Window Selector 이벤트 루프 정책을 글로벌할게 설정하면 이를 해결할 수 있다고 합니다. 

 

 

 

github.com/encode/httpx/issues/914#issuecomment-622586610

 

Windows - Python 3.8+ raises "RuntimeError: Event Loop is closed" on exit. · Issue #914 · encode/httpx

Checklist [ x] The bug is reproducible against the latest release and/or master. [ x] There are no similar issues or pull requests to fix it yet. Describe the bug I get the following traceback when...

github.com

 

import sys


if __name__ == '__main__':
  py_ver = int(f"{sys.version_info.major}{sys.version_info.minor}")
  if py_ver > 37 and sys.platform.startswith('win'):
  	asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

 

 

매우 잘됩니다.

728x90