因为原始的WSGI程序中的日志实在是太丑了, 也没有一个简单的配置 加载方式, 所以我在本地运行调试wsgi程序时, 使用Tornado作为 Container, 可以利用Tornado漂亮的日志输出, 以及option.

图在这里:

tornado-run

核心代码在这里:

Tornado相关的文档: https://www.tornadoweb.org/en/stable/wsgi.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import tornado.wsgi
from flask_app import application

# 使用tornado提供的对WSGI协议的支持
container = tornado.wsgi.WSGIContainer(application)
settings = dict({
'debug': options.debug,
'autoreload': True,
})
# 主程序, 将所有请求发送到container中
tornado_app = tornado.web.Application([
('.*', tornado.web.FallbackHandler, dict(fallback=container))
], **settings)

server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

我为什么要用它呢?

脚本不需要对原始程序进行任何修改, 只要将application变量import到本地即可, 然后你就具有了以下几个优势:

  1. 赏心悦目的日志输出;
  2. 快速启动以及重启 WSGI 程序(至少不用去读那么多 WSGI 的帮助文档了);
  3. 增加调试模式, 可以在写程序时, 输出调试信息而不必考虑线上问题;
  4. 或许可以顺便熟悉一下 Tornado;

详细的例子请查看Github

https://github.com/corvofeng/tornado-run

请时刻注意, 这个文件仅仅适合在本地调试时使用, 正式环境中使用Tornado可能会将程序 变成单线程的形式, 并且会有IO阻塞.