파이썬 비동기 IO

  우리는 CPU 속도가 디스크, 네트워크 및 기타 IO보다 훨씬 빠른, 알고있다. 하나 개의 스레드에서, CPU 속도는 전송, 파일을 읽고 쓰기 네트워크 데이터 등의 IO 작업의 경우에 그러나 매우 빠른 코드 실행,,, 당신은 다음 단계로 진행하기 전에 완료 IO 작업을 기다릴 필요가있다. 이 조건은 동기 IO라고합니다.

 

  다른 사람이 코드가 현재 스레드를 실행하는 CPU에 의해 실행 할 수 없습니다 필요 동안 IO 작업하는 동안 현재 스레드가 일시 중단됩니다.

  현재 스레드에 대한 IO 작업이 차단되어 있기 때문에, 원인이 다른 코드를 실행할 수 없습니다, 그래서 우리는 동시에 여러 사용자를위한 코드를 실행 여러 스레드 또는 여러 프로세스를 사용해야합니다. 각 사용자는 일시 중단 IO 스레드에 리드가 발생하는 경우, 다른 사용자 스레드가 영향을받지 않습니다, 스레드를 할당됩니다.

  멀티 스레드 및 멀티 프로세스 모델은 동시성 문제를 해결하지만, 시스템은 제한 스레드없이 증가 할 수 없습니다. 스레드의 과도한 수, CPU 시간은 심각한 성능 저하의 결과로, 적은 코드를 실행하는 실제 시간에 스레드 스위치에 소요되는, 그래서 일단 오버 헤드를 전환 스레드는 또한 훌륭한 때문에.

  우리는 문제를 해결하기 원하기 때문에 심각한 불일치의 고속 CPU 및 IO 장치 거북이 속도 기능을 수행하는 것입니다, 멀티 스레드 및 멀티 프로세스가이 문제를 해결하는 단지 방법입니다.

  문제를 해결하는 또 다른 방법은 비동기 IO IO이다. 코드가 시간이 많이 걸리는 작업 IO를 수행해야하는 경우, IO 명령은 IO의 결과를 기다리지 않고 발행하고 다른 코드를 실행 갔다한다. 얼마 상기 IO 복귀 결과 후에 후 처리를 위해 CPU에 통지.

 

 

1) aiohttp

asyncio당신은 단일 스레드 동시 IO 작업을 달성 할 수있다. 클라이언트 만이 아닌 전원 플레이하면. 경우 asyncioHTTP 연결이 IO 작업이기 때문에, 같은 웹 서버와 같은 서버에 사용되는 단일 스레드 + 할 수 있습니다 coroutine높은 동시성을 지원 다수의 사용자.

asyncioTCP, UDP, SSL 및 다른 프로토콜을 구현, aiohttp기반으로 asyncioHTTP 프레임 워크의 구현입니다.

  설치 : 

aiohttp를 설치 PIP

  예 :

''
     aiohttp搭建웹服务使用
 ''
 수입 asyncio를
 으로부터 aiohttp 오기 웹 

비동기 DEF 인덱스 (요청)
     기다리고 asyncio.sleep을 ( 0.5 )
     리턴 web.Response (본체 = ' <H1> 색인 </ H1> ' ) 


비동기   DEF 안녕하세요 (요청)
     기다리고 (asyncio.sleep를 0.5 ) 
    텍스트 = " <H1> 안녕하세요 % S </ H1> ' % request.match_info [ ' 이름 ' ]
     리턴 (web.Response (본체 = text.encode 'UTF-8 '), 콘텐츠 _ = ' text / html과 ' ) 

비동기 데프 초기화 (루프) : 
    응용 프로그램 = web.Application (루프 = 루프) 
    app.router.add_route는 ( ' GET ' , ' / ' , 인덱스) 
    (app.router.add_route를 ' GET ' , ' / 인사 / {이름} ' 안녕하세요,) 
    SRV = 기다리고 있습니다 (app.make_handler () loop.create_server, ' 0.0.0.0 ' , 6000 ) 
    인쇄 ( ' 서버는 http://0.0.0.0:6000에서 시작 ')
     복귀 의 SRV 

루프 = asyncio.get_event_loop () 
loop.run_until_complete (INIT (루프)) 
loop.run_forever ()

  이 시간, 당신은 주소를 통해 웹 서비스에 액세스 할 수 있습니다

 

참고 aiohttp초기화 함수가 init()A는 coroutine, loop.create_server()다음 사용 asyncioTCP 서비스를 만들 수 있습니다.

  

 

추천

출처www.cnblogs.com/xingxia/p/python_aiohttp.html