1. 程式人生 > >Python 學習筆記9 - Tornado

Python 學習筆記9 - Tornado

9、Tornado

1Tornado 開發基礎

1-1 Tornado 概述

特點:

1)  非阻塞式伺服器

2)  速度相當快

3)  既是web server也是web framework

 

安裝:

 >pip install tornado

 

驗證:

  C:\Users\Administrator>python

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:32:19) [MSC v.1500 32 bit (

Intel)] on win32

Type "help", "copyright", "credits" or"license" for more information.

>>> import tornado

>>> 

 

知乎的服務端就是使用tornado開發的

 

1-2 建立Tornado應用

Tornado需要手動建立專案

 

vim

 

執行:

python main.py --port=9000

localhost:9000

 

1-3 模板和表單

渲染模板的方法:self.render(‘index.html’)

 

模板的語法– 變數、控制語句、自定義函式

➜  tornado python

Python 2.7.6 (default, Jun 22 2015,18:00:18)

[GCC 4.8.2] on linux2

Type "help","copyright", "credits" or "license" for more information.

>>> from tornado.template importTemplate

>>> content =Template("<html><body>{{con}}</bady></html>")//變數

>>> printcontent.generate(con="hello world")

<html><body>helloworld</bady></html>

>>> 

>>> content =Template("<html><body>{{[x for x inrange(10)]}}}</bady></html>") //控制語句

>>> print content.generate()

<html><body>[0, 1, 2, 3, 4, 5,6, 7, 8, 9]}</bady></html>

>>> 

>>> def demo(s):

...    return 'hello '+s

...

>>> demo('world')

'hello world'

>>> printTemplate("{{d('world')}}").generate(d=demo) //函式

hello world

>>> 

 

模板檔案:

 template_path = os.path.join(os.path.dirname(__file__),”templates”)

 

靜態檔案- JS CSS檔案

static_path = os.path.join(os.path.dirname(__file__),”static”)

加快靜態檔案的載入的速度方法:<href=’{{ static_url(“1.css”)}}’>

 

1-4 資料庫操作

base64

➜ tornado python

Python 2.7.6 (default, Jun 22 2015, 18:00:18)

[GCC 4.8.2] on linux2

Type "help", "copyright", "credits" or"license" for more information.

>>> import base64

>>> import uuid

>>> printbase64.b64encode(uuid.uuid4().bytes+uuid.uuid4().bytes)

jGnJFmflSJu9HYz4ApTBkBHi56dBQkessSMGFnDCzM0=

  >>>

 

mysql - torndb

安裝:

  sudoapt-get install python-mysqldb

  sudopip install torndb

  注意:torndb依賴mysqldb

 

mongodb – nosql – big data

  asyncmongo- 非同步的介面,正好契合tornado的框架

 

2Tornado開發-非同步實現

2-1 非同步的使用

同步:提交請求 -> 等待伺服器處理-> 處理完畢返回

這個期間客戶端瀏覽器不能幹任何事

 

非同步:請求通過事件觸發-> 伺服器處理 -> 處理完畢

     這時瀏覽器仍然可以做其他的事件

 

2-2 Tornado的基礎非同步呼叫

使用非同步生成器

 

yield – 每當使用時,才會呼叫 - 節省效能,提高效能

 

併發

 

2-3 Tornado的長輪詢以及Websocket – 實時的獲取資訊

長輪詢– 聊天室

 

Websocket – 全雙工

 

3Tornado開發 - 高效能解讀

3-1 epoll 介紹

poll本質是linux系統呼叫,作用是監控資源是否可用

 

epoll – event poll

 

select

 

優點:

  支援一個程序開啟大數目的socket描述符

  IO效率不會隨socket描述符數量的提升而線性下降

  使用mmap加速核心與使用者空間的訊息傳遞

 

epoll的C介面

  intepoll_create(int size)

  intepoll_ctl(int epfd, int op, int fd, struct epoll_event *event)

  intepoll_wait(int epfd, struct poll_event *event, int max, int timeout)

 

3-2 Tornado 高效能解讀

 

3-3 RequestHandler 和 Application

在web.py

Application類:

__init__

listen

add_handlers – 新增路由的轉發規則

add_transform – 新增輸出的過濾器

__call__

 

RequestHandler類

 

Tornado的工作流程

 

3-4 Tornado Webserver

將Django部署到Tornado中,將它作為HTTP server來使用

 

4Tornado 開發 - TCP 程式設計

4-1 tornado 在 TCP 層的工作

TCP:

  面向連線的、可靠的、基於位元組流的傳輸層通訊協議

 

與http的區別:

傳輸資料可以只用TCP,但是傳出的資料是無法識別的,因此需要應用層的協議去解析,如HTTP,FTP

 

應用:

  面向連線,對傳輸的資料有可靠,安全性的要求,就需要使用TCP

 

TCP建立連線過程:三次握手

 

4-2 ioloop 相關 API 介紹

 

4-3 iostream 相關 API 介紹

 

4-4 RPC 介紹以及使用

 

4-5 twisted 的介紹以及與 tornado 的比較