hyeseong-dev 2024. 3. 20. 13:53

파이썬의 코루틴(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) 등 비동기 프로그래밍의 다른 개념들에 대한 이해도 필요합니다.