이 발표에서는 발표자가 직접 개발한 aiotools 라이브러리를 소개합니다.
Python 3.4부터 추가된 asyncio 라이브러리와 uvloop 등 고성능 써드파티 이벤트루프 구현으로 이제 Python에서도 고성능 네트워킹 프로그램들을 개발할 수 있는 여건이 마련되었습니다. 하지만 asyncio의 장미빛 약속과 Python 언어의 간결함에도 불구하고, 실제로는 세세하게 신경써야 할 것들이 상당히 많습니다. 대표적으로 비동기 task의 cancel이나 UNIX signal이 발생하는 경우 graceful shutdown을 구현하는 것이 까다롭고, 이에 따라 수많은 boiler-plate 코드가 양산됩니다.
aiotools는 발표자가 Lablup 기계학습 분산처리 프레임워크를 개발하며 작성한 asyncio 활용 코드 중에서, 반복적으로 사용되는 기능들을 추출하여 다른 사람들도 쉽게 재사용할 수 있게 한 것입니다. 작고 단순하지만 테스트가 잘 되어있는 기반 코드를 제공(code coverage 100%)하고, boiler-plate를 추상화함으로써 코드 반복에 따른 버그의 발생가능성을 최소화해줍니다. 특히, Python 3.6에서 추가된 async-generator와 async-context manager를 활용하여 graceful shutdown을 항상 안정적으로 수행할 수 있도록 도와주는 것이 특징입니다.
aiotools 소스코드 : https://github.com/achimnol/aiotools