이 기사를 읽고의 항목에 토네이도, 아주 잘 쓰여진 :
https://zhuanlan.zhihu.com/p/37382503
토네이도는 비 차단 네트워크 I / O를을 사용하여 파이썬 웹 프레임 워크 라이브러리와 비동기 네트워크입니다
토네이도는 네 개의 주요 부분으로 나눌 수 있습니다 :
- 웹 프레임 워크
- HTTP 클라이언트와 서버를 달성하기 위해
- 비동기 네트워크 라이브러리
- 코 루틴 라이브러리
WSGI는 웹 서버 게이트웨이 인터페이스의 약자입니다.
웹 긴 연결을 제공하는 데 필요한 기능을 실시간은, 각 사용자에 대한 대부분의 시간을 유휴 각 사용자에 대한 스레드를 제공하는 것을 의미 기존의 동기식 웹 서버에, 물론, 각 스레드의 비용이 매우 비싸다.
동시 접속으로 인한 오버 헤드를 최소화하기 위해, 토네이도 사용한 단일 스레드 이벤트 루프 모드. 이는 모든 애플리케이션 코드가 있어야한다는 것을 의미 비동기 비 차단 , 하나만이 동시에 동작시키는 효과가 있기 때문이다.
거의 백 엔드와 손바닥 독서는이 프레임 워크를 채택해야한다 알고있다.
다음은) 빠른 도움말 리콜 코드 :( 파이 컴퓨팅 서비스를 제공합니다
#의 pi.py의 수입 json으로 수입 수학 수입 레디 스를 가져 tornado.ioloop 수입 tornado.web의 클래스 (객체) FactorialService : 데프 __init__ (자동 캐시) : self.cache = 캐시 self.key = " 계승 " 데프 CALC (자기, N ) : S = self.cache.hget (self.key, STR (N)) 의 경우 S : 리턴 INT (S), 진정한 S = 1 에 대한 I 의범위 (1 , n)은 : 이야 * = 난 self.cache.hset (self.key, STR (N), STR (S)) 복귀 의 거짓 클래스 : PiService (오브젝트) DEF __init__ (자기 캐시) 자체 .cache = 캐시 self.key = " PIS " DEF CALC (자기, N) : S = self.cache.hget (self.key, STR (N)) 의 경우 S : 리턴 플로트 (S), 진정한 S = 0.0 대 난 의 범위 (N) 의+ = 1.0 / (2 * I + 1) / (2 * I + 1 ) S = math.sqrt (S * 8 ) self.cache.hset (self.key, STR (N), STR (S)) 리턴 S, 거짓 클래스 FactorialHandler (tornado.web.RequestHandler) : 데프 (자동, 계승) 초기화는 : self.factorial = 계승 데프 (자동) 수 : N = INT (self.get_argument ( " N " ) 또는 1 ) 사실, 캐시를 = self.factorial.calc (N) 결과 = { " N " : N, " 사실 " : 사실은, " 캐시 " : 캐시 } self.set_header ( " Content-Type을 " , " 응용 프로그램 / JSON; 문자셋 = UTF-8 " ) self.write (json.dumps (결과)) 클래스 PiHandler (토네이도. web.RequestHandler) DEF 초기화 (자기, PI) self.pi = PI는 DEF 자기 (GET) : N = INT (self.get_argument ( " N " ) 또는 1 ) PI, 캐시 =self.pi.calc (N) 결과 = { " N " : N, " PI " : PI, " 캐시 " : 캐시 } self.set_header ( " Content-Type을 " , " 애플리케이션 / JSON; 문자셋 = UTF-8 " ) self.write (json.dumps (결과)) DEF make_app () : 캐시 = redis.StrictRedis ( " 로컬 호스트 " , 6379 ) 계승 = = FactorialService (캐시) PI PiService (캐시) 반환 tornado.web.Application ([ (R " / 사실 " , FactorialHandler { " 팩토리얼 " : 계승}) (R " / PI " , PiHandler { " PI " : PI}) ] ) 의 경우 __name__ == " __main__ " : 응용 프로그램 = make_app ()가 app.listen ( 8888 ) . tornado.ioloop.IOLoop.current () 시작 ()
두 레디 스 처리기를 사용할 필요가 있기 때문에, 그래서 우리는 매개 변수를 전달, 그것을 분리 레디 스됩니다. 또한 처리기 초기화 함수 파라미터는 어떤 파라미터가 전달 될 수있는 경로를 사전 등록 및 사전의 키와 해당 파라미터의 이름을 전달할 수있다. 우리는 실행 python pi.py
브라우저 액세스를 열고, http://localhost:8888/pi?n=200
브라우저의 출력을 볼 수 있습니다, {"cached": false, "pi": 3.1412743276, "n": 1000}
이 값이 이미 원주의 비율이 매우 가깝습니다.
아주 잘 쓰여진 거의에서 다음 :( 알고)
https://zhuanlan.zhihu.com/p/37382503
토네이도 : 안녕하세요, 세계
수입 tornado.ioloop 수입 tornado.web의 클래스 MainHandler (tornado.web.RequestHandler) : 데프 수 (자기) : self.write ( " 안녕, 세계 " ) 데프 make_app () : 반환 tornado.web.Application ([ (R을 " / " , MainHandler) ]) 경우 __name__ == " __main__ " : 앱 = make_app ()가 app.listen ( 8888 ) . tornado.ioloop.IOLoop.current () (시작)
이 공식 안녕하세요, 세계 예를 수행하는 것입니다 python hello.py
, HTTP에 액세스 할 수있는 브라우저를 엽니 다 : // localhost를 : 8888 / 일반 출력 서버를 볼 수 있습니다 Hello, world
.
일반 토네이도 웹 서버는 일반적으로 4 개 가지 요소로 구성되어 있습니다.
- 예를 ioloop, 그것은 글로벌 토네이도 이벤트 루프, 엔진이 코어 서버입니다, 예는
tornado.ioloop.IOLoop.current()
예를 ioloop 기본 토네이도입니다. - 응용 프로그램 인스턴스, 그것은 완전한 백 엔드 응용 프로그램을 나타냅니다, IT 서비스를 제공하는 서버 소켓 포트를 장착합니다. ioloop 응용 프로그램 인스턴스의 복수를 할 수 있습니다 예를 들면, 하나 개의 샘플, 사실, 여러 허용 할 수 있지만, 복수는 일반적으로 거의 사용되지 않는다.
- 서비스 핸들러가 클라이언트 요청을 처리 할 때 비즈니스 로직을 대표하는 핸들러 클래스, 우리가 수행 사이드 개발의 더미를 작성하는 것입니다.
- 테이블을 라우팅하고,이 노선도를 형성하기 위해 부착 된 URL 규칙 핸들러를 지정합니다. 요청이 들어 오면, 액세스 요청 URL 쿼리 노선도에 따른 적절한 서비스 핸들러를 찾을 수 있습니다.
이 네 가지 구성 요소 사이의 관계는 라우팅 테이블이 여러 핸들러를 포함하는 응용 프로그램은 라우팅 테이블을 포함하는 ioloop가 (여러 서비스 포트 관리) 여러 응용 프로그램을 포함합니다. ioloop는 수신 및 내부 서버 시간 초과 작업의 구현을 담당하는 사업을 실행하기 위해 핸들러를 구동하기위한 책임이 클라이언트 요청에 응답 할 책임 엔진입니다 엔진 핵심 서비스입니다 .
요청이 들어, 읽기 요청을 ioloop 온다 압축을 해제 할 때 HTTP 요청 객체가 소켓 라우팅 테이블에서 해당 응용 프로그램을 찾을 수 있습니다, 쿼리 요청 URL 객체로 라우팅 테이블 핸들러를 장착 한 후 핸들러를 실행합니다. 실행 처리기 메서드는 일반적으로 개체를 반환 한 후 클라이언트로 전송되는 표적 서열 HTTP 응답에 개체를 포장에 대한 책임 ioloop.
ioloop 인스턴스가 단일 스레드 환경에서 실행으로.
ioloop 소개 :
tornado.ioloop - 메인 이벤트 루프
는 I / O에 대한 이벤트 루프 블로킹 소켓 (소켓 인터페이스를 블로킹).
IOLoop (가) 주위 warpper IS ASYNCIO 이벤트 루프 (비동기 이벤트 루프).
참조 :
https://tornado-zh.readthedocs.io/zh/latest/guide/async.html