파이썬에서의 코루틴에 대해서 정리한다.
Coroutine이란?
- 제네레이터의 확장 방식
- 한번 코루틴을 실행하면 계속 상주하면서 호출에 대응하는 방식
Assignment
1. 호출 시 마다 good 문자열이 추가되도록 코드를 만들기
# Assignment 1 - good 문장열이 추가되어서 출력되도록 만들기
import time
def coroutine_test():
greeting = "good "
while True:
text = (yield greeting)
print(greeting + text)
if __name__ == "__main__":
cr = coroutine_test()
print("cr=",end=""), print(cr)
next(cr)
time.sleep(2)
print("send 1")
cr.send("morning")
time.sleep(2)
print("send 2")
cr.send("afternoon")
time.sleep(2)
print("send 3")
cr.send("evening")
time.sleep(2)
###################################################3
# 실행 결과
cr=<generator object coroutine_test at 0x7fced9bc3740>
send 1
good morning
send 2
good afternoon
send 3
good evening
2. asyncio를 사용한 1억 누적 프로그램 코드
# Assignment 2 - 5천만씩 누적하여 1억까지 누적하기
import asyncio
async def coroutine_1(num):
result_value = 0
while result_value < num:
result_value += 1
return result_value
async def coroutine_2(num):
result_value = 0
while result_value < num:
result_value += 1
return result_value
async def main():
c1 = await coroutine_1(50000000)
c2 = await coroutine_2(50000000)
print("ret_value =",end="")
print(one+two)
print("end of main")
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
#################################################
# 실행 결과
ret_value =100000000
end of main
Asyncio
- asyncio는 async/await 구문을 사용하여 동시성 코드를 작성하는 라이브러리
- 고수준으로 구조화된 네트워크 구조에 적합
- 다음과 같은 작업을 위한 API 제공
-
코루틴들을 동시에 실행하고 실행을 제어
-
네트워크 IO및 IPC를 수행
-
자식 프로세스를 제어
-
큐를 통해 작업을 분산
-
동시성 코드를 동기화
-
https://docs.python.org/ko/3/library/asyncio.html- asyncio 파이썬 문서
'wecode > TIL 정리' 카테고리의 다른 글
위코드 Foundation - HTTP에 대해서 (0) | 2020.08.08 |
---|---|
자료구조 TIL - 1. Array, Tuple (0) | 2020.08.03 |
위코드 Pre Course - 웹 크롤링 (0) | 2020.07.28 |
위코드 Pre Course - 파이썬의 Process (0) | 2020.07.27 |
위코드 Pre Course - 파이썬의 Thread (0) | 2020.07.25 |