天天看點

使用Tornado部署Flask項目

Tornado

不僅僅是一個WEB架構,也可以是一個WEB伺服器。

Tornado

中我們可以使用

wsgi

子產品下的

WSGIContainer

類運作其他

WSGI

應用如:

Fask

,

Bottle

,

Django

首先我們寫一個最小的

Flask

應用

# hello.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"
           

編寫

Tornado

伺服器

# run.py
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from hello import app

http_server = HTTPServer(WSGIContainer(app))
http_server.listen(8008)
IOLoop.instance().start()
           

我們建立了一個

HTTP

伺服器執行個體

http_server

,因為伺服器要服務于我們剛剛建立的WEB應用,将接收到的用戶端請求通過WEB應用中的路由映射表引導到對應的

handler

中,是以在建構

http_server

對象的時候需要傳入WEB應用對象

app

。可以使用自身的WEB架構,如果使用托管的應用,将要托管的應用以參數的形式傳入到

WSGIContainer

類中。

我們定義這個伺服器監聽的端口為

8008

IOLoop

Tornado

的核心

I/O

循環排程子產品,也是

tornado

高性能的基石,封裝了Linux的

epoll

和BSD的

kqueue

,用于處理

socket

相關的連接配接、響應、異步讀寫等網絡事件。每個

Tornado

程序都會初始化一個全局唯一的

IOLoop

執行個體,在IOLoop中通過靜态方式

instance()

進行封裝,擷取

IOLoop

執行個體直接調用此方法即可啟動

IOLoop

執行個體,即啟動事件循環機制,配合非阻塞的

HTTP Server

工作。

如果是

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

語句,

IOLoop.current()

傳回目前線程的

IOLoop

執行個體。

IOLoop.start()

啟動

IOLoop

執行個體的

I/O

循環,同時伺服器監聽被打開

完成之後直接允許即可

python run.py