Python/Python 정리

[Python] 코루틴(coroutine) 정리 : Python 동시성 및 비동기 작업

우준세 2023. 10. 3. 22:37
728x90
반응형

 

이번 포스팅은 제가 파이썬으로 작업하면서 비동기로 다중 스레드 작업을 할 수 있는 방법을 찾다가 알게 된 코루틴(coroutine)이라는 도구를 알게 되어 정리하였습니다.


| 코루틴(coroutine) 개념 

- 파이썬은 기본적으로 단일 스레드로 동작하는 언어입니다.

그런데 어떻게 하면 동시성 및 비동기 작업을 관리할 수 있을까요?

이 문제를 해결하기 위해 파이썬은 코루틴(coroutine)이라는 도구를 제공합니다.

 

-  코루틴은 파이썬에서 사용하는 일반적인 함수의 모양과 비슷하지만,

실행 중에 일시 중단하고 다른 작업으로 전환한 다음 나중에 재개할 수 있는 특수한 함수입니다.


| 코루틴(coroutine) 특징 및 예제 

- 코루틴은 다음과 같은 특징이 있는데 마치 C#에서 사용하는 비동기 함수를 만드는 방법과 비슷합니다.

 

특징 1 : async 및 await 키워드를 사용하여 정의

특징 2 ; await 키워드는 실행을 일시 중단하고 결과를 기다리는 데 사용

 

예제 1)

import asyncio

async def greet(name):
    print(f"Hello, {name}!")
    await asyncio.sleep(1)
    print(f"Goodbye, {name}!")

async def main():
    await greet("Junse")
    await greet("jason")

asyncio.run(main())

- 예제 1에서 async 함수 greet는 코루틴이며

await를 사용하여 asyncio.sleep(1)과 같은 비동기 작업을 수행하고 기다립니다.

- main 함수에서 두 개의 greet 코루틴 함수를 실행하여

"Hello"를 출력하고 1초 동안 대기한 다음 "Goodbye"를 출력합니다.

 

예제 2 ) asyncio.gather() 사용하여 여러 코루틴을 동시에 실행

import asyncio

async def main():
    tasks = [greet("Jun"), greet("Bob")]
    await asyncio.gather(*tasks)

asyncio.run(main())

- asyncio 모듈은 코루틴을 조작하고 비동기 작업을 관리하기 위한 도구를 제공합니다.\

- tasks라는 함수의 리스트를 만들어 인자로 함수에 넣어줍니다.

- asyncio.gather()를 사용하면 여러 작업을 동시에 실행하며

모든 작업이 완료될 때까지 기다릴 수 있습니다.


| 코루틴(coroutine) 장점

장점 1 : 앞서 코루틴의 특정과 예제에서 알 수 있듯이 여러 작업을 동시에 처리할 수 있으며

이를 통해 CPU 자원을 효율적으로 활용하고 병렬 작업을 수행할 수 있습니다.

장점 2 : 비동기적으로 작업을 처리하면서 다른 작업을 동시에 처리할 수 있습니다.

장점 3 : 가독성과 유지 보수성을 콜백 함수를 사용하는 것보다 쉬워집니다.


 

파이썬의 코루틴이라는 도구를 알게 되면서 여러 방법을 더욱 생각할 수 있게 되었고

파이썬 언어에서 더욱 쉽게 다중 스레드 작업을 할 수 있게 되었습니다.

 

질문이나 틀린 점이 있으면 댓글로 남겨주세요

다음 포스팅으로 찾아오겠습니다

감사합니다 :)

 

 

 

728x90
반응형