await를 지원하지 않는 라이브러리를 사용할 때는 일반적인 def를 사용해 선언한다.await를 사용해 호출하는 라이브러리이거나, 비동기적으로 함수가 동작한다면 async def를 사용해 선언한다.FastAPI는 동기 라이브러리도 비동기적으로 실행한다.
def로 선언되어 있으면, 직접 호출하지 않고 외부 스레드 풀에서 실행된다.# Non-block
@router.get("")
def sync():
results = some_library()
return results
async def로 선언되어 있으면 동기 라이브러리의 함수를 이벤트루프에서 처리하여 서버가 블록된다.# Block
@router.get("")
async def async():
results = await some_library()
return results
--worker 옵션을 통해 비동기적으로 처리worker로 실행하면 입력한 인수의 개수만큼 프로세스가 생성되어 동작하여, worker 개수만 처리할 수 있다.@router.get("")
def sync():
results = some_library()
return results
출처: FastAPI 공식 문서