태그 보관물: asyncio

(Python) asyncio를 통한 비동기 코루틴 완전 정복

asyncio에 의한 단일 스레드 병렬 작업

지난 글에서 concurrent.futures 모듈을 통해서 멀티스레딩/멀티프로세싱에 대한 고수준 API를 파이썬에서 사용할 수 있게 됨을 확인했다. 이 새로운 API는 멀티 스레드 디스패치를 사용하기 쉽게 만들 뿐 아니라, 직접 스레드를 제어하는 것이 아닌 Future 객체를 사용함으로써 Promise 개념을 도입한 것과 유사한 결과를 보여준다고 했다.

이 기능이 도입된 것이 파이썬 3.2였고, 뒤이은 업데이트인 3.4 버전에서는 단일 스레드 기반의 비동기 처리를 할 수 있는 asyncio가 도입되었다. asyncio는 파이썬의 코루틴을 사용하여 I/O 등의 레이턴시가 큰 작업에 대해 non-blocking으로 동작하는 코드를 작성할 수 있게 한다.

계속 읽기

asyncio

https://docs.python.org/3/library/asyncio-task.html

Task와 코루틴

코루틴은 특정한 규약을 따르는 제너레이터이다. 문서상으로 모든 코루틴은 @asyncio.coroutine 데코레이터를 붙이지만, 이것이 반드시 필수적인 것은 아니다.

코루틴에서는 전통적인 yield 대신에 yield from 구문을 사용한다.

코루틴이라는 단어는 제너레이터와 마찬가지로 두 가지 다른 컨셉으로 사용된다.

  • 코루틴을 정의하는 함수. 이 경우 구분을 위해 이것을 코루틴 함수라 따로 부를 수 있다.
  • 코루틴 함수를 호출하여 생성된 객체. 이 객체는 계산 및 IO 작업을 표현한다. 또한 반드시 실행을 완료해야 한다. 코루틴 함수와 구분하여 코루틴 객체라 부른다.

계속 읽기