Skip to content

Latest commit

 

History

History

Chap05

README.md

비동기

프로그래밍에서 가장 어려운 개념 중의 하나인 동기/비동기, 블락/논블락
파이토닉한 코드에서는 어떻게 다루고 있는지 확인해 보자

동기 처리

동기의 기준

클라이언트가 연결을 재확인(폴링)해야하는 경우 = 동기

동기 블록

손님 주문 -> 점원 커피 제작 시작 -> 손님 대기 -> 점원 커피 완성 -> 점원 커피 출하 -> 손님 수령

동기 논블록

손님 주문 -> 점원 대기요청 -> 점원 커피 제작 시작 -> 손님 다른일 -> 손님 재요청 -> 점원 대기요청 -> 점원 커피 완성 -> 손님 재요청 -> 점원 커피 출하 -> 손님 수령

비동기 처리

비동기의 기준

클라이언트가 연결을 재확인(폴링)하지 않아도 되는 경우 = 비동기

비동기 블록

손님 주문 -> 점원 진동벨 제공 -> 점원 커피 제작 시작 -> 손님 대기 -> 점원 커피 완성 -> 점원 진동벨 울림 -> 손님 재요청 -> 점원 커피 출하 -> 손님 수령

비동기 논블록

손님 주문 -> 점원 진동벨 제공 -> 점원 커피 제작 시작 -> 손님 다른일 -> 점원 커피제작 완료 -> 점원 커피 출하 및 진동벨 호출 -> 손님 픽업

파이썬 비동기 Library : concurrent.futures

Executor 클래스와 ThreadPoolExecutor/ProcessPoolExecutor

Future 객체

Module Function 객체

파이썬 비동기 논블락 I/O 라이브러리 : Asyncio

용도

비동기/논블락은 I/O 작업에 사용할 때 가장 좋다!
기존 파이썬의 비동기/논블락 I/O 구현법 : callback함수
기존 방식의 단점 : 예외처리 불가, 디버깅 어려움
해당 방식의 개선안 : concurrent.futures
해당 방식의 단점 : 스레드/프로세스 기반으로 돌아감(스레드와 프로세스의 성능저하 그대로 맞음) Async IO : 제네레이터 + 코루틴

동작 방식

비동기 처리용 Event Loop + 코루틴 기반 작업

코루틴 선언

@ayncio.coroutine 데코레이터 사용
yield from으로 산출

파이썬 native 코루틴

들어가기 전에 : python의 iterable과 iterator

awaitable

async iterable / async iterator