728x90
반응형
코루틴(Coroutine)은 파이썬에서 비동기 프로그래밍을 지원하기 위한 기능 중 하나입니다. 코루틴은 일반 함수와 달리 실행을 중단하고 다시 재개할 수 있는 특성을 가지고 있습니다. 이는 특히 I/O 바운드 작업(예: 파일 읽기/쓰기, 네트워크 요청 등)에서 효율적으로 사용됩니다. 코루틴을 이용하면 동기적으로 수행되는 작업을 비동기적으로 처리하여 성능을 향상시킬 수 있습니다.
코루틴의 특징
- 비동기 작업 처리: 코루틴은 I/O 작업을 비동기적으로 처리하여 프로그램의 효율성을 높입니다.
- 상태 유지: 코루틴은 실행 상태를 유지하고, 실행을 중단한 지점부터 다시 시작할 수 있습니다.
- 이벤트 루프: 코루틴은 이벤트 루프와 함께 동작하여 여러 작업을 병렬적으로 수행할 수 있습니다.
코루틴 작성 및 사용법
파이썬에서 코루틴을 작성하고 사용하는 방법은 다음과 같습니다:
1. async와 await 키워드
- async def: 코루틴 함수를 정의합니다.
- await: 코루틴 내부에서 다른 코루틴의 실행을 기다릴 때 사용합니다
import asyncio
# 코루틴 함수 정의
async def my_coroutine():
print("코루틴 시작")
await asyncio.sleep(1)
print("코루틴 종료")
# 이벤트 루프에서 코루틴 실행
asyncio.run(my_coroutine())
2. 이벤트 루프
- asyncio.run(): 코루틴을 실행하기 위해 이벤트 루프를 시작합니다.
- asyncio.create_task(): 코루틴을 태스크로 생성하여 병렬로 실행합니다.
import asyncio
async def task1():
print("태스크 1 시작")
await asyncio.sleep(2)
print("태스크 1 종료")
async def task2():
print("태스크 2 시작")
await asyncio.sleep(1)
print("태스크 2 종료")
async def main():
# 코루틴을 병렬로 실행
task1_coro = asyncio.create_task(task1())
task2_coro = asyncio.create_task(task2())
await task1_coro
await task2_coro
# 이벤트 루프에서 메인 코루틴 실행
asyncio.run(main())
3. 비동기 제너레이터
비동기 제너레이터는 async for와 async yield 키워드를 사용하여 비동기적으로 값을 생성할 수 있습니다
import asyncio
# 비동기 제너레이터 함수 정의
async def async_gen():
for i in range(3):
await asyncio.sleep(1)
yield i
# 비동기 제너레이터 사용
async def main():
async for value in async_gen():
print(value)
asyncio.run(main())
코루틴의 장점
- 효율적인 I/O 작업: 코루틴을 사용하면 I/O 작업 중에 다른 작업을 병렬로 처리할 수 있어 효율적입니다.
- 간단한 비동기 코드 작성: async와 await 키워드를 사용하여 비동기 코드를 작성하는 것이 간단합니다.
- 높은 성능: 비동기 작업을 효율적으로 처리하여 성능을 향상시킬 수 있습니다.
코루틴의 단점
- 디버깅 어려움: 비동기 코드의 흐름을 따라가는 것이 어렵고, 디버깅이 까다로울 수 있습니다.
- 복잡성 증가: 비동기 로직을 추가하면 코드의 복잡성이 증가할 수 있습니다.
파이썬 코루틴은 비동기 프로그래밍에서 중요한 역할을 하며, 이를 활용하면 네트워크 요청, 파일 I/O 등에서 성능을 크게 향상시킬 수 있습니다.
728x90
반응형
'Python' 카테고리의 다른 글
데이터 시각화를 빠르게! Streamlit으로 웹 애플리케이션 만들기 (0) | 2024.10.10 |
---|---|
Python 3.12의 혁신! 더욱 유연해진 f-string과 새로운 기능 탐구 (0) | 2024.09.24 |
왜 FastAPI는 최고의 선택인가? 빠른 API 개발을 위한 혁신적인 Python 프레임워크 (0) | 2024.09.09 |
Poetry란 무엇인가? (0) | 2024.07.08 |
[FastAPI] FastAPI란 무엇인가? (0) | 2024.05.30 |