• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

window 10 환경에서 RuntimeError: Event loop is closed 에러

21.12.19 14:43 작성 조회수 726

2

안녕하세요. 좋은 강의를 통해 많은 배움을 얻어가고 있습니다. 

 

12/14에 bee님께서 남겨주신 질문과 비슷한 에러가 발생하여 질문드립니다.

3-5 강의(오픈 API를 활용한 이미지 데이터 수집)에서 4분30초 즈음의 테스트코드(강의코드와 동일)를 날린 상황에 마찬가지로 RuntimeError: Event loop is closed가 발생하고 있습니다.

 

 

urls = [f"{BASE_URL}?query={keyword}&display=20&start={i}" for i in range(1, 10)]

코드에서 start의 범위를 1~9, 1~10, 1~11 등으로 변경할 때는 정상 출력되고, 동일한 페이지 범위에 대해 두 번 이상 실행할 때마다 에러가 발생했었습니다.(이것 또한, 때마다 다른 듯한..?)

이유가 무엇일까요..?

특히 요청의 마지막에서 에러가 발생하는 것 같아보였습니다. 예를 들어 start 파라미터로 [1~9] 페이지를 받을 때, 8페이지까지는 받아오는 것으로 보였습니다.

 

저의 환경은 윈도우10 vscode에서

파이썬3.7.10,

aiohttp 3.7.3 버전을 활용하고 있습니다.

 

또한 한가지 더 문의드릴 사항이.. try, except로 위의 에러 발생에 pass를 해도 pass로 넘어가는 경우도 있고, pass로 넘어가지 않는 경우가 있네요..? (try, except를 메인루틴안에도 넣어보고, fetch함수의 with session 앞에 넣어보기도 했었습니다.)

혹시 async 에서 예외처리하는 방법이 따로 있는지요?

 

 

답변 1

답변을 작성해보세요.

1

안녕하세요!

  1. 파이썬 버전 3.8을 넘어가면서 윈도우 운영체제에서는 기본적으로 유닉스 기반 운영체제와 달리 ProactorEventLoop 정책이 사용됩니다. 아래의 코드를 통해 이벤트 루프 정책을 유닉스 기반 운영체제와 동일하게 맞춰주세요! asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
  2. 후에 강의에서 설명하지만 start는 단순히 시작점을 의미합니다! 따라서 원하시는 페이지네이션이 구현이 안되었을 가능성이 큽니다! 아직 문제가 해결되지 않으셨다면 전체 코드를 볼 수 있을까요?
  3. 아무래도 1번 문제일 가능성이 큰데 혹시 어떤 코드에서 에러가 안잡히는지 알 수 있을까요?? 보통 await 코드를 작성한 부분을 try except로 묶어 캐치해주는 것이 깔끔합니다.

즐거운 연말 보내세요!

감사합니다.