async with : 비동기 컨텍스트 매니저

파이썬의 컨텍스트 매니저는 with 블럭을 적용할 수 있는 객체를 말한다. with 문에서 쓰이는 컨텍스트 매니저 객체는 코드 블럭에 대한 데코레이터처럼 동작한다. 가장 흔한 예가 open() 함수로 생성하는 파일 디스크립터이다. with open(‘data.txt’) as f:   for line in f:     print(line) 컨텍스트 매니저 객체는 __enter__(), __exit__() 두 개의 내장 메소드를 가지고 있는 것으로 간주된다. 위 코드에서는 with 다음에 나오는 open(‘data.txt’) 라는 코드는 파일 디스크립터를 반환한다. 그런데,

일반함수를 비동기 코루틴화하는 데코레이터 만들기

지난 글에서 urlopen()과 같은 표준 라이브러리 함수를 어떻게 비동기 코루틴처럼 asyncio에서 사용할 수 있는지 살펴보았다. aiohttp 등의 비동기 라이브러리를 사용해서 여러 핸들러를 작성해야 할 때, 이와 같은 처리를 많이 해야 한다면 빈번하게 런루프 메소드를 호출하는 것보다, 간단히 데코레이터를 만들어서 활용하는 것이 어떨까? 무엇이 되었든 파이썬 함수는 인자를 받고 결과를 내보내는 구조로 되어 있다. ( (*args,

Python 표준 함수를 asyncio에서 비동기로 호출하는 방법

파이썬 3.4에서 asyncio 가 추가되어 I/O 바운드된 작업을 단일 스레드에서 비동기로 처리할 수 있는 방법이 생겼다. 하지만 대부분의 파이썬 내장 라이브러리 함수들은 코루틴이 아닌 일반 함수들이며, 이들은 모두 블럭킹 방식으로 동작한다. 즉 asyncio 의 비동기는 실질적으로는 I/O 액세스처럼 CPU가 관여할 필요가 없는 일들에 대해서 “병렬적으로 기다리는” 식으로 동시다발적인 처리의 전체 수행 시간을 줄이는 식으로 동작하는데,

asyncio : 단일 스레드 기반의 Nonblocking 비동기 코루틴 완전 정복

asyncio에 의한 단일 스레드 병렬 작업 지난번 concurrent.futures를 소개한 글에서 파이썬 3에서부터 멀티스레딩/멀티프로세싱에 대해 새로 도입된 고수준 API에 대해 살펴봤다. 이 새로운 API는 함수 호출을 병렬로 처리하는 동작을 사용하기 쉽게 만들 뿐 아니라, 직접 스레드를 제어하는 것이 아닌 Future 객체를 사용함으로써 자바스크립트의 Promise 개념을 도입한 것으로 평가할 수 있다고 보았다. 새로운 병렬처리 API와 더불어 Future

asyncio

https://docs.python.org/3/library/asyncio-task.html Task와 코루틴 코루틴은 특정한 규약을 따르는 제너레이터이다. 문서상으로 모든 코루틴은 @asyncio.coroutine 데코레이터를 붙이지만, 이것이 반드시 필수적인 것은 아니다. 코루틴에서는 전통적인 yield 대신에 yield from 구문을 사용한다. 코루틴이라는 단어는 제너레이터와 마찬가지로 두 가지 다른 컨셉으로 사용된다. 코루틴을 정의하는 함수. 이 경우 구분을 위해 이것을 코루틴 함수라 따로 부를 수 있다. 코루틴 함수를 호출하여 생성된 객체.