파이썬의 코루틴(coroutine)은 동시성 프로그래밍을 가능하게 하는 고급 함수입니다. 코루틴은 서브루틴(subroutine)의 일종으로 생각할 수 있는데, 서브루틴은 특정 작업을 수행하기 위해 프로그램의 실행 흐름을 잠시 중단하고 해당 작업이 완료되면 다시 원래의 실행 흐름으로 돌아오는 함수입니다. 하지만 코루틴은 이보다 더 강력한 기능을 제공합니다. 코루틴은 실행을 중지(suspend)하고 재개(resume)할 수 있는 여러 진입점(entry points)을 가지고 있으며, 이를 통해 함수의 실행 상태를 저장하거나 나중에 다시 실행을 계속할 수 있습니다.
코루틴의 주요 특징:
- 비동기 실행: 코루틴은
비동기 작업을 쉽게 처리
할 수 있게 해주며, 이는I/O 바운드 작업(파일 읽기/쓰기, 네트워크 요청 등)에 특히 유용
합니다. - 동시성 프로그래밍: 코루틴을 사용하면
단일 스레드
에서여러 작업을 동시에 실행하는 것처럼
만들 수 있습니다. 이를 통해 멀티스레딩이나 멀티프로세싱의 복잡성 없이동시성을 구현
할 수 있습니다. - 리소스 효율성: 코루틴은
멀티스레딩에 비해 적은 메모리를 사용
하며, 컨텍스트 스위칭(context switching)의 오버헤드가 적습니다.
파이썬에서 코루틴 사용하기:
파이썬에서는 async def
로 코루틴 함수를 정의하고, await
키워드를 사용하여 코루틴의 실행을 중지하고 결과가 준비될 때까지 기다립니다. 이는 특히 비동기 I/O 작업을 처리할 때 유용합니다.
import asyncio
async def my_coroutine():
print("Hello")
await asyncio.sleep(1) # 1초 동안 실행을 중지하고 기다립니다.
print("World")
# 코루틴 실행
asyncio.run(my_coroutine())
위 예제에서 my_coroutine
은 비동기로 실행되며, await asyncio.sleep(1)
에서 실행을 1초 동안 중지합니다. 이는 sleep
이 완료될 때까지 다른 작업으로 컨트롤을 넘겨주기 때문에, 프로그램이 블록되지 않고 효율적으로 작업을 수행할 수 있습니다.
코루틴은 복잡한 비동기 프로그래밍을 단순화하고, 동시성을 더 쉽게 관리할 수 있게 해줍니다. 하지만 코루틴을 효과적으로 사용하기 위해서는 이벤트 루프(event loop), 태스크(task), 퓨처(future) 등 비동기 프로그래밍의 다른 개념들에 대한 이해도 필요합니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
GIL(Global Interpreter Lock) (0) | 2024.03.20 |
---|---|
데코레이터란? (0) | 2024.03.20 |
List와 Tuple의 차이 (0) | 2024.03.20 |
FastAPI를 이용한 TDD 개발 - 7 (0) | 2024.03.19 |
FastAPI를 이용한 TDD 개발 - 8 (0) | 2024.03.14 |