天天看点

使用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