Python asyncio 모듈.
- event loop 에서 실행할 것들을 schedule(등록) 하고 작업들을 실행, 취소, 일시 중지 가능.
- 파이썬 3.4 부터 첫배포, 버전에 따라 기능 추가.
- 파이썬 3.6 에서의 기능 상태.
- - async, await, asynchronous generator, asynchronous comprephension
- - 파이썬 3.6 에서의 asynico 상세 : https://docs.python.org/3.6/whatsnew/3.6.html#asyncio
async def . 네이티브 코루틴
- 제너레이터 기반의 코루틴과 구분하기 위하여 async def 로 만들어진 것을 네이티브 코루틴이라 부름.
- 아래 코드 보면 이해됨.
import asyncio
async def my_async(): # 함수명 my_async 를 네이티브코루틴으로 설정.
print("Hello asyncio"); # 네이티브 코루틴 시험용 출력으로 함.
my_loop = asyncio.get_event_loop() # 이벤트 루프 받고.
my_loop.run_until_complete(my_async()); # 네이티브 코루틴 실행완료할때까지 기다림.
my_loop.close(); # 이벤트 루프 닫음.
2개 이상의 코루틴 실행 시키는 방법
- asyncio.gather(*[코루틴1, 코루틴2, ...])
또는 asyncio.gather(코루틴1, 코루틴2, ...) 도 된다고는 오류경험 많았음. 위의 형식으로 하는게 안전.
import asyncio
async def my_async(): # 함수명 my_async 를 네이티브코루틴으로 설정.
print("Hello asyncio") # 네이티브 코루틴 시험용 출력으로 함.
async def my_async2():
print("Hello 2")
my_loop = asyncio.get_event_loop() # 이벤트 루프 받고.
my_loop.run_until_complete(asyncio.gather(*[my_async(), my_async2()])); # asyncio.gather 로 여러개 기록하면됨
my_loop.close(); # 이벤트 루프 닫음.
상기 코드는 아래 코드처럼 해도 동일.
import asyncio
async def my_async(): # 함수명 my_async 를 네이티브코루틴으로 설정.
print("Hello asyncio") # 네이티브 코루틴 시험용 출력으로 함.
async def my_async2():
print("Hello 2")
async def my_main_async():
asf1 = my_async()
asf2 = my_async2()
await asyncio.gather(asf1, asf2)
my_loop = asyncio.get_event_loop() # 이벤트 루프 받고.
my_loop.run_until_complete(my_main_async());
my_loop.close(); # 이벤트 루프 닫음.
2개 이상의 코루틴 구현코드 실예.
await
- 네이티브 코루틴안에서만 사용가능한 실행완료할때까지 대기하는것.
- await 지정가능한 개체 : 코루틴, 퓨처, 태스크.
- 코드예 : 앞의 코드 예의 async def 함수 내에서 await 사용예를 보인다.
import asyncio
async def my_async(): # 함수명 my_async 를 네이티브코루틴으로 설정.
await asyncio.sleep(5.0); # await 예로 5초대기 함수 해본것.
print("Hello asyncio"); # 네이티브 코루틴 시험용 출력으로 함.
my_loop = asyncio.get_event_loop() # 이벤트 루프 받고.
my_loop.run_until_complete(my_async()); # 네이티브 코루틴 실행완료할때까지 기다림.
my_loop.close(); # 이벤트 루프 닫음.
async with 클래스 as 변수 :
- 클래스 인스턴스 실행하고 결과를 변수에 기록함.
- async with 로 동작 가능한 클래스를 만들려면 __aenter__, __aexit__ 멤버 함수 필수 구현해야함. - 아래 클래스구현예.
class 클래스명:
async def __aenter__(self):
...
async def __aexit__(self, exc_type, exc_value, traceback):
...
이벤트 루프 상세
asyncio 의 que 상세
asyncio 활용예.
웹소켓 구현시 활용예.
첫 등록 : 2020.03.16
최종 수정 :
단축 주소 : https://igotit.tistory.com/2486
'지속가능티끌 > Python' 카테고리의 다른 글
Python. 다른 파이썬 파일의 함수 호출하기 . import, from import, import as (0) | 2020.03.19 |
---|---|
Python. requests 모듈. http post get (0) | 2020.03.18 |
파이썬. 웹소켓. WbeSocket 구현. (0) | 2020.03.11 |
Python. 소켓통신 (0) | 2019.10.28 |
Python. time . sleep . datetime. 밀리초 등 (0) | 2019.05.22 |
댓글