이벤트 루프 함수 정리하기

hodu·2022년 11월 20일
0

asyncio

목록 보기
7/7

이벤트 루프란?

작업 반장. 말 그대로 loop를 돌면서 이벤트를 하나씩 실행시키는 역할을 한다.
이때 만약 실행중인 작업이 I/O나 sleep을 만나게 된다면 이벤트 루프에게 제어권을 넘기고 이벤트 루프는 다음 작업을 실행하게 된다.

그리고 응답을 받은 순서대로 멈췄던 부분부터 다시 통제권을 가지고 작업을 마무리한다.

이벤트 루프 가져오기

1. asyncio.get_event_loop()

이 방법은 비추천. "동일한 쓰레드" 내에서만 동작하며 이벤트를 얻는 방법이다.

  1. new_event_loop() : 새로운 이벤트 루프를 만든다.
  2. set_event_loop() : 해당 루프 인스턴스를 새로운 루프 인스턴스로 만든다.

만약 get_event_loop()를 호출했지만 이벤트 루프가 없을 경우, new 👉 set을 통해 이벤트 루프를 생성하고 가져오게 된다.

...
	task1 = loop.create_task(greeting(0.5, 'Hello!'))
...
loop = asyncio.get_event_loop()
task = loop.create_task(main())
loop.run_until_complete(task)
loop.close()

2. asyncio.get_running_loop()

파이썬 3.7부터 도입되었으며 이 방법을 이용하는 것을 추천한다.
코루틴, 태스크, 함수 내에서만 호출이 가능하기 때문에 현재 동작하고 있는 이벤트 루프를 가져올 수 있다.
해당 함수를 이용하게 되면 loop를 생성할 필요 없이 asyncio의 내부 함수만을 이용해서 태스크를 생성할 수 있게 된다.

...
	task1 = asyncio.create_task(greeting(0.5, 'Hello!'))
...

asyncio.run(main())
profile
안녕 세계!

0개의 댓글