Tornado Web Server
tornado 是 python 的 web 框架,同时也是异步网络库,源代码由 FriendFeed 开发。通过使用非阻塞的网络 I/O,tornado 可以扩展到成千上万的连接,使其适合长轮询,WebSockets,以及需要用户长连接的应用。
Hello,world
- 如下 "Hello,world" 是一个简单 tornado 的 web app。
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
- 上例没有使用 tornado 的异步特性
Threads and WSGI
tornado 和大多数 python 的 web 框架不一样,它不依赖于 WSGI,并且通常一个进程只 run 一个线程。在后面的 User's guide 章节会介绍 tornado 的异步编程方式。
tornado.wsgi 模块实现了对 WSGI 的支持,但是它不是未来发展的核心,并且大多数应用应该直接使用 tornado 的接口 (tornado.web) 代替使用 WSGI。
正常情况下,tornado 的代码不是线程安全的。在 tornado 其他线程中进行调用唯一安全的方法是 IOLoop.add_callback。你也可以在其他线程中使用 IOLoop.run_in_executor 去异步调用一个阻塞函数,但是注意传递给 run_in_executor 的函数应该避免引用任何 tornado 对象。run_in_executor 是同阻塞代码交互推荐的方式。
Installation
pip install tornado
tornado 可以通过 pip 安装,但是相关的 demo 并不会下载;可以通过 git clone 远程的仓库获取。
- Prerequisites
tornado 运行在 python 2.7 以及 3.4+. python 2.7.9中关于 ssl 模块的更新也是必须的。
Platforms
tornado 应该运行在任何 类Unix 的平台,尽管为了最佳的性能和可伸缩性,只有 Linux(epoll) 和 BSD(qkueue) 被推荐在生产环境开发。tornado 仍然可以运行在 windows 平台,此配置不被官方支持,但仍可以供开发者开发。
没有 tornado 的 IOLoop 的 reworking 接口,不可能添加一个原生的 windows 的 tornado IOLoop 实现 或者在 AsyncIO or Twisted 框架下利用 windows 的 IOCP。
网友评论