async def와 await는 Python의 비동기 프로그래밍을 구성하는 핵심 개념으로 개념을 정리하려고 한다.
예:
print("A")
time.sleep(3)
print("B")
위 코드는 "A" 출력 → 3초 대기 → "B" 출력 순서대로 실행됩니다.
어떤 작업이 끝날 때까지 기다리지 않고, 다른 작업을 먼저 처리할 수 있게 합니다.
주로 네트워크 요청, 파일 I/O, 대기 시간이 긴 작업에서 사용합니다.
async def say_hello():
return "Hello"
async def는 이 함수가 비동기 함수임을 선언합니다.
일반 함수처럼 호출할 수 없고, await와 함께 사용해야 결과를 얻을 수 있습니다.
message = await say_hello()
await는 비동기 함수의 결과가 준비될 때까지 기다리는 키워드입니다.
await는 반드시 비동기 문맥(예: async def 안)에서만 사용할 수 있습니다.
📍 동기 코드 예시
import time
def main():
print("Start")
time.sleep(3)
print("End")
main()
실행 결과: Start → 3초 대기 → End
import asyncio
async def main():
print("Start")
await asyncio.sleep(3)
print("End")
asyncio.run(main())
실행 결과는 동일하지만, 이 코드는 비동기적으로 대기합니다.
await asyncio.sleep(3)는 CPU를 차지하지 않고 대기 상태에 들어갑니다.
| 개념 | 설명 |
|---|---|
| async def | 비동기 함수를 정의할 때 사용 |
| await | 비동기 함수나 작업의 결과가 준비될 때까지 기다림 |
| asyncio.run() | 비동기 함수 실행을 위한 진입점 (Python 3.7+) |
| 비동기 처리의 장점 | 느린 작업(I/O 등) 동안 CPU를 놀리지 않고 다른 작업을 처리 가능 |
📞 동기 방식: 친구한테 전화해서 응답을 기다릴 때까지 아무것도 못 함
📨 비동기 방식: 문자 보내놓고 답 올 때까지 다른 일 하다가 나중에 확인