파이썬 웹 프레임 워크에 대해 --Tornado

이 기사를 읽고의 항목에 토네이도, 아주 잘 쓰여진 :

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 개 가지 요소로 구성되어 있습니다.

  1. 예를 ioloop, 그것은 글로벌 토네이도 이벤트 루프, 엔진이 코어 서버입니다, 예는 tornado.ioloop.IOLoop.current()예를 ioloop 기본 토네이도입니다.
  2. 응용 프로그램 인스턴스, 그것은 완전한 백 엔드 응용 프로그램을 나타냅니다, IT 서비스를 제공하는 서버 소켓 포트를 장착합니다. ioloop 응용 프로그램 인스턴스의 복수를 할 수 있습니다 예를 들면, 하나 개의 샘플, 사실, 여러 허용 할 수 있지만, 복수는 일반적으로 거의 사용되지 않는다.
  3. 서비스 핸들러가 클라이언트 요청을 처리 할 때 비즈니스 로직을 대표하는 핸들러 클래스, 우리가 수행 사이드 개발의 더미를 작성하는 것입니다.
  4. 테이블을 라우팅하고,이 노선도를 형성하기 위해 부착 된 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

https://zhuanlan.zhihu.com/p/37382503

https://www.tornadoweb.org/en/stable/ioloop.html

추천

출처www.cnblogs.com/Flash-ylf/p/11618578.html