코루틴을 알기 전 몇가지 간단하게(내가 잘 모르니까 ㅋㅋ) cs지식을 짚고 넘어가자
바운드와 블로킹
블로킹 : 바운드에 의해 코드가 멈추게 되는 현상
CPU 바운드
- 프로그램이 실행될 때 실행 속도가 CPU속도에 의해 제한 됨을 의미
- 복잡한 수학 수식을 계산할 때(연산을 많이할 때)
I/O 바운드
- Input/Output 바운드
- 프로그램이 실행될 때 실행 속도가 I/O에 의해 제한됨을 의미
- 사용자가 키보드로 숫자를 입력하는 경우 뿐만 아니라, 컴퓨터와 컴퓨터끼리 통신을 할 대에도 I/O 바운드가 발생한다.
동기 vs 비동기
동기(Sync)
- 코드가 동기적으로 동작한다. => 코드가 반드시 작성된 순서 그대로 실행된다.
비동기(Async)
코루틴은 비동기로 처리된다.
코루틴의 이해
루틴
- 하나의 진입점과 하나의 탈출점이 있는 루틴이다.
- 루틴이란? 일련의 명령 (코드의 흐름)
- 메인 루틴 : 프로그램의 메인 코드의 흐름
- 서브 루틴 : 보통의 함수나 메소드(메인 루틴을 보조함)
코루틴
- 서브 루틴의 일반화된 형태
- 다양한 진입점과 다양한 탈출점이 있는 루틴이다.(간단하게 다양한 출/입 함수이다)
- 파이썬에서는 비동기 함수는 코루틴 함수로 만들 수 있다.
async/await
- 코루틴 함수는 async 키워드를 함수 앞에 붙여 사용이 가능하다.
- 원하는 진입/탈출점에 await 키워드를 붙여 사용한다.
- async 함수 밖에서 await 키워드를 사용하고 싶은 경우에는 ayncio 내장 라이브러리를 사용한다.
- asyncio.run(함수())
- 또한 await 키워드 뒤에는 어웨이터블 객체(coroutine, task, future)가 와야한다.
task
- 코루틴을 동시에 예약하는 데 사용된다.
- asyncio.create_task()와 같은 함수를 사용해 테스크로 싸일 때 코루틴은 곧 실행 되도록 자동으로 예약됩니다.
예제는 좀 더 숙지 후 올릴 예정