Path parameter과 Query Parameter의 실습을 하기 전에 FastAPI에 대해서 공부하다보니
FastAPI의 async def에 관해 작성된 페이지인 Concurreny and async/await를 보았다.
우선 기본적으로 FastAPI는 async def
를 꼭 사용할 필요는 없다고 한다.
def 만으로도 비동기 처리 되도록 FastAPI 프레임 워크로 구현하고 있다고 한다.
다음과 같이 await로 호출하도록 가이드를 하는 서드 파티 라이브러리를 사용하는 경우
results = await some_library()
다음과 같이 선언해서 사용하라고 한다.
@app.get('/')
async def read_results():
results = await some_library()
return results
이러한 키워드는 주로 I/O 작업과ㅏ 같은 블로킹 작업을 처리하기 위해 사용된다.
FastAPI에서 async와 await를 사용하는 것은 클라이언트 요청을 동시에 처리하고,
I/O 작업을 효율적으로 처리하여 애플리케이션의 성능을 향상시킬 수 있는 장점이 있습니다.
파이썬은 비동기 코드 코루틴 (coroutines) 를 async 와 await 으로 지원하고 있음
- 비동기식 코드는 언어가 프로그램에게 코드의 특정 지점에서 다른 작업이 다른 곳에서 끝날 때까지 기다려야 함을 선언하는 방법을 가지고 있음을 의미
코루틴은 async def 함수로 반환 된 것을 용어로 표현한 것으로, 파이썬은 함수 같이 코루틴이 시작될 수 있고 어느 시점에 끝날 지 알고, await 가 있을 때마다 내부적으로 일시 중지 될 수 있다는 것도 알고 있음
다른 작업을 기다린다는 의미를 다음과 같은 표현으로 나열할 수 있음
- 클라이언트가 네트워크를 통해 보낼 데이터
- 시스템이 읽고 프로그램에 제공할 디스크의 내용
- 프로그램이 디스크에 쓰기 위해 시스템에 제공한 내용
- 원격 API 작업
- 완료할 DB 작업
- 결과를 반환하는 DB 쿼리
기본적으로 FastAPI는 async def 를 꼭 쓸 필요는 없음
- def 만으로도 비동기 처리 되도록 FastAPI 프레임 워크로 구현