본문 바로가기
프로그래밍 언어/Python

[python] 비동기 I/O asyncio

by nahkim 2023. 5. 8.

파이썬의 비동기 모듈인 asyncio에 대해 알아보자

 

일단 동기와 비동기는?

동기(synchronous) 처리는 특정 작업이 끝나면 다음 작업을 처리하는 순차처리 방식

비동기(asynchronous) 처리는 여러 작업을 처리하도록 예약한 뒤 작업이 끝나면 결과를 받는 방식

 

asyncio(Asynchronous I/O)란?

비동기 프로그래밍을 위한 모듈이며, CPU 작업과 I/O를 병렬로 처리하게 해준다

 

 

네이티브 코루틴 만들기

import asyncio

async def 함수이름():
	코드

* 네이티브 코루틴 : async def로 만든 코루틴

* 코루틴 : async를 적용한 비동기 함수

 

  • 이벤트 루프 = asyncio.get_event_loop()
  • 이벤트 루프.run_until_complete(코루틴 객체 or 퓨처 객체)
loop = asyncio.get_event_loop()		# 이벤트 루프 얻기
loop.run_until_complete(hello())	# hello함수가 끝날 때까지 기다림

loop.close()	# 이벤트 루프 닫기

 

적용 코드

 

 

그렇다면 병렬 스레드 방식과 싱글 스레드 동시성 처리 방식 중에 하나를 선택하자면??

싱글 스레드 동시성 처리 방식

 

why?

병렬 스레드 방식보다 싱글 스레드 동시성 처리 방식이 데이터 처리 비용이 적게 든다!

싱글 스레드 동시성 처리 방식이 안정성이 보장된다! 즉, 병렬 스레드 방식이 데이터 누락 발생 가능성 확률이 높다.

 

 

출처 : https://dojang.io/mod/page/view.php?id=2469 , https://docs.python.org/ko/3/library/asyncio.html