python-tornado簡單使用

首先附上tornado官方網(wǎng)站?tornado?(看官網(wǎng)最全)

安裝tornado:

pip install?tornado

先從hello world開始

import tornado.ioloop

import tornado.web

#定義處理類型

class MainHandler(tornado.web.RequestHandler):

? ??#添加一個處理get請求方式的方法

? ? def get(self):

? ? ? ? self.write("Hello, world")

def make_app():

? ? return tornado.web.Application([

? ? ? ? (r"/", MainHandler),

? ? ])

if __name__ == "__main__":

? ? app = make_app()? #創(chuàng)建一個應用對象

? ? app.listen(8888) # 設置端口

? ? tornado.ioloop.IOLoop.current().start()?#啟動web程序,開始監(jiān)聽端口的連接

Tornado的優(yōu)勢

1.輕量級web框架

2.異步非阻塞IO處理方式

3.出色的抗負載能力

4.優(yōu)異的處理性能,不依賴多進程/多線程,一定程度上解決C10K問題

5.WSGI全棧替代產(chǎn)品,推薦同時使用其web框架和HTTP服務器

Tornado 代碼解析

tornado.web:tornado的基礎web框架

????RequestHandler:封裝對請求處理的所有信息和處理方法

????get/post/..:封裝對應的請求方式

????write():封裝響應信息,寫響應信息的一個方法

tornado.ioloop:核心io循環(huán)模塊,封裝linux的epoll和BSD的kqueue, tornado高性能處理的核心。

????current()返回當前線程的IOLoop實例對象

????start()啟動IOLoop實力對象的IO循環(huán),開啟監(jiān)聽

程序調試之debug配置

????#自動重啟+取消緩存模板+取消緩存靜態(tài)文件+提供追蹤信息tornado.web.Application([(..)], debug=True)注:開發(fā)之初可以設置debug=True方便調試,開發(fā)完畢改為False.

get方式傳遞參數(shù)

????get_query_arguments(name,default=_ARG_DEFAULT,strip=True)

????get_query_argument(name ,strip=True)

post方式傳遞參數(shù)

????get_body_arguments(name, default=_ARG_DEFAULT,strip=True)

????get_body_argument(name ,strip=True)

request/json

# -*- coding:utf-8 -*-

from tornado.web import Application, RequestHandler

from tornado.ioloop import IOLoop

class IndexHandler(RequestHandler):

? ? def get(self):

? ? ? ? print self.request

? ? ? ? json_str = {"username": "admin", "password": "123123"}

? ? ? ? self.write(json.dumps(json_str))

if __name__ == "__main__":

? ? app = Application([(r"/", IndexHandler)])

? ? app.listen(8000)

? ? IOLoop.current().start()

異步非阻塞

import time

import logging

import tornado.ioloop

import tornado.web

import tornado.options

from tornado import gen

from concurrent.futures import ThreadPoolExecutor

class NoBlockingHnadler(tornado.web.RequestHandler):

? ? @gen.coroutine

? ? def get(self):

? ? ? ? print(11111111111)

? ? ? ? yield gen.sleep(10)

? ? ? ? self.write('Blocking Request')

class BlockingHnadler(tornado.web.RequestHandler):

? ? def get(self):

? ? ? ? print(11111111111)

? ? ? ? time.sleep(10)

? ? ? ? self.write('Blocking Request')

def make_app():

? ? return tornado.web.Application([

? ? ? ? (r"/block", BlockingHnadler),

? ? ? ? (r"/noblock", NoBlockingHnadler),

? ? ], autoreload=True)

if __name__ == "__main__":

? ? app = make_app()

? ? app.listen(8888)

? ? tornado.ioloop.IOLoop.current().start()

這里要強調的是:這里的異步非阻塞是針對另一請求來說的,本次的請求該是阻塞的仍然是阻塞的。

多進程運行

coroutine 是給Non-blocking 函數(shù)提供異步協(xié)程的方式運行, ThreadPoolExecutor 則可以給blocking 的函數(shù)提供異步的方式運行,但是由于是多線程的,Python 使用多線程對性能來說是需要謹慎的,大量的計算量的情況可能會造成性能的下降。

import tornado.web

from tornado import gen

from tornado.httpserver import HTTPServer

class IndexHandler(tornado.web.RequestHandler):

? ? def get(self):

? ? ? ? self.write('index')

@gen.coroutine

def doing():

? ? yield gen.sleep(10)

? ? raise gen.Return('Non-Blocking')

class NonBlockingHandler(tornado.web.RequestHandler):

? ? @gen.coroutine

? ? def get(self):

? ? ? ? result = yield doing()

? ? ? ? self.write(result)

def make_app():

? ? return tornado.web.Application([

? ? ? ? (r"/index", IndexHandler),

? ? ? ? (r"/nonblocking", NonBlockingHandler),

? ? ])

def main():

? ? app = make_app()

? ? server = HTTPServer(app)

? ? server.bind(8888)

? ? server.start(2)? # 設置啟動多少個進程

? ? tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":

? ? main()


coroutine 是給Non-blocking 函數(shù)提供異步協(xié)程的方式運行, ThreadPoolExecutor 則可以給blocking 的函數(shù)提供異步的方式運行,但是由于是多線程的,Python 使用多線程對性能來說是需要謹慎的,大量的計算量的情況可能會造成性能的下降。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 官方文檔中文文檔Tornado概覽淺談Python Web 框架:Django, Twisted, Tornado...
    一只寫程序的猿閱讀 43,558評論 7 50
  • 其中Tornado的定義是 Web 框架和異步網(wǎng)絡庫,其中他具備有異步非阻塞能力,能解決他兩個框架請求阻塞的問題,...
    HappyOn閱讀 2,218評論 2 5
  • 1.tornado是一個異步的http框架 2.常用模塊 importtornado.httpserver imp...
    冬gua閱讀 593評論 0 0
  • 1.tornado是一個異步的http框架 2.常用模塊 importtornado.httpserverimpo...
    a荷包蛋閱讀 863評論 0 0
  • tornado框架是一款相較于其他web framework處理服務器性能問題更加強健的輕量級的強大的Pytho...
    惡人未滿閱讀 7,444評論 3 10

友情鏈接更多精彩內容