본문 바로가기
지속가능티끌/Python

Python. asyncio. 비동기 모듈.

by i.got.it 2020. 3. 16.

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

 

What’s New In Python 3.6 — Python 3.6.10 documentation

What’s New In Python 3.6 Editors Elvis Pranskevichus , Yury Selivanov This article explains the new features in Python 3.6, compared to 3.5. Python 3.6 was released on December 23, 2016. For full details, see the changelog. See also PEP 494 - Python 3.6 Re

docs.python.org

 

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개 이상의 코루틴 구현코드 실예. 

 

bybit. API. WebSocket 서버 3개 동시 접속 파이썬 코드.

개요 - bybit 의 USD 종목용 websocket 서버 1개와 , USDT 종목용 websocket 서버 2개에 동시 접속 파이썬 코딩.  작동방식. 1. 파이썬 코드 실행되면 파일 apikey_url_bybit.txt 를 읽어서 접속서버주소와 api k..

igotit.tistory.com

 

 

 

 

 

 

 

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):
        ...

 

 

 

 

 

 

이벤트 루프 상세

 

이벤트 루프 — Python 3.8.2 문서

이벤트 루프 소스 코드: Lib/asyncio/events.py, Lib/asyncio/base_events.py 머리말 이벤트 루프는 모든 asyncio 응용 프로그램의 핵심입니다. 이벤트 루프는 비동기 태스크 및 콜백을 실행하고 네트워크 IO 연산을 수행하며 자식 프로세스를 실행합니다. 응용 프로그램 개발자는 일반적으로 asyncio.run()과 같은 고수준의 asyncio 함수를 사용해야 하며, 루프 객체를 참조하거나 메서드를 호출할 필요가 거의 없

docs.python.org

 

asyncio 의 que 상세

 

큐 — Python 3.8.2 문서

큐 소스 코드: Lib/asyncio/queues.py asyncio 큐는 queue 모듈의 클래스와 유사하도록 설계되었습니다. asyncio 큐는 스레드 안전하지 않지만, async/await 코드에서 사용되도록 설계되었습니다. asyncio 큐의 메서드에는 timeout 매개 변수가 없습니다; 시간제한이 있는 큐 연산을 하려면 asyncio.wait_for() 함수를 사용하십시오. 아래의 예제 절도 참조하십시오. Queue class asyncio.Q

docs.python.org

 

 

 

asyncio 활용예.

 

웹소켓 구현시 활용예. 

 

파이썬. 웹소켓. WbeSocket 구현.

파이썬 WebSocket 코딩 사전 준비. - 모듈 WebSockets 설치하기. - 코드에서 import websockets 하고 실행시켜서 모듈 없다는 메시지 보이면 websockets 모듈 설치하면됨. - 아래 영상에서 websocket 아닌 websock..

igotit.tistory.com

 

 

 

암호화폐. API. bybit. 실시간 시세수신. WebSocket. Python

개요. - 암호화폐 거래소 바이빗 에서 제공하는 WebSocket 기반 실시간 시세수신(= 실시간 체결 틱 데이터) 파이썬 코드. 코드. - Python 실행 영상. 코드 구현 요점 설명. 코드에서 함수 websocket.send('{"op

igotit.tistory.com

 

 

 

bybit. API. WebSocket 서버 3개 동시 접속 파이썬 코드.

개요 - bybit 의 USD 종목용 websocket 서버 1개와 , USDT 종목용 websocket 서버 2개에 동시 접속 파이썬 코딩.  작동방식. 1. 파이썬 코드 실행되면 파일 apikey_url_bybit.txt 를 읽어서 접속서버주소와 api k..

igotit.tistory.com

 

 

 

 


첫 등록 : 2020.03.16

최종 수정 : 

단축 주소 : https://igotit.tistory.com/2486

 


 

 

 

 

 

댓글



 

비트코인




암호화폐       외환/나스닥/골드       암호화폐/외환/나스닥/골드 암호화폐/외환/나스닥/골드   암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)     롤오버 이자 없는 스왑프리계좌
( 스왑프리 암호화폐도 거래 가능 )    
MT4, MT5 , cTrader 모두 지원     FTMO 계좌 매매운용. MT4,MT5