Python 의 한 프로그램 에서 여러 번 의 이벤트 순환 을 어떻게 사용 하 는 지 상세 하 게 설명 합 니 다.

배경
본 고 는 주로 Python 의 한 프로그램 에서 여러 번 의 이벤트 순환 을 사용 하 는 것 에 관 한 내용 을 소개 합 니 다.저 희 는 Python 비동기 프로그램 작성 에 있어 다음 과 같은 구 조 를 자주 사용 합 니 다.

import asyncio
async def doAsync():
 await asyncio.sleep(0)
 #...
if __name__ == "__main__":
 loop = asyncio.get_event_loop()
 loop.run_until_complete(doAsync())
 loop.close()
이것 은 물론 좋 은 것 이지 만 두 번 째 loop 을 사용 할 때 프로그램 이 이상RuntimeError: Event loop is closed을 던 집 니 다.이것 도 크게 나 무 랄 것 이 없습니다.이상 적 인 프로그램 도 한 시간 순환 에서 각종 비동기 IO 문 제 를 해결 해 야 합 니 다.
그러나 Ipython 과 같은 터미널 환경 에 놓 여 있 습 니 다.Python 의 비동기 프로그램 작성 을 연습 하려 면 매번 터미널 을 다시 시작 하 는 것 이 너무 번 거 로 울 수 있 습 니 다.이 럴 때 더 좋 은 해결 방안 이 있 는 지 찾 아야 합 니 다.
해결 방안
우 리 는asyncio.new_event_loop함 수 를 사용 하여 새로운 이벤트 순환 을 만 들 고asyncio.set_event_loop전역 의 이벤트 순환 을 설정 할 수 있 습 니 다.이 럴 때 비동기 이벤트 순환 을 여러 번 실행 할 수 있 지만 기본asyncio.get_event_loop을 저장 하고 이벤트 순환 이 끝 날 때 되 돌려 주 는 것 이 좋 습 니 다.
결국 우리 코드 는 이렇게
코드

import asyncio
async def doAsync():
 await asyncio.sleep(0)
 #...
def runEventLoop()
 loop = asyncio.new_event_loop()
 asyncio.set_event_loop(loop)
 loop.run_until_complete(doAsync())
 loop.close()
if __name__ == "__main__":
 oldloop = asyncio.get_event_loop()
 runEventLoop()
 runEventLoop()
 asyncio.set_event_loop(oldloop)
감상
이벤트 순환 은 원래 함께 많은 일 을 해 야 하 는데 정식 Python 코드 에 서 는 하나의 기본 이벤트 순환 만 사용 하 는 것 이 좋 습 니 다.평소에 공부 하고 연습 하면 편 합 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기