이번 포스팅은 제가 파이썬으로 작업하면서 비동기로 다중 스레드 작업을 할 수 있는 방법을 찾다가 알게 된 코루틴(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 : 가독성과 유지 보수성을 콜백 함수를 사용하는 것보다 쉬워집니다.
파이썬의 코루틴이라는 도구를 알게 되면서 여러 방법을 더욱 생각할 수 있게 되었고
파이썬 언어에서 더욱 쉽게 다중 스레드 작업을 할 수 있게 되었습니다.
질문이나 틀린 점이 있으면 댓글로 남겨주세요
다음 포스팅으로 찾아오겠습니다
감사합니다 :)
'Python > Python 정리' 카테고리의 다른 글
Python 예외 처리 방법 (try ~ except) (2) | 2024.02.14 |
---|---|
[Python] Descriptor 이해 : 객체 속성 제어의 고급 기능 (0) | 2023.10.04 |
[Python] 코딩테스트를 위한 리스트(List) 정리 (0) | 2022.08.08 |
[Python] super() 메서드 정리 (0) | 2022.07.06 |
[Python] os.path를 활용한 파일, 디렉터리 관리 (0) | 2022.07.03 |