Tornado Web服务器

Tornado 是一个python web框架和异步网络库,最初开发于 FriendFeed . 通过使用非阻塞网络I/O,Tornado可以扩展到数万个开放连接,使其非常适合 long pollingWebSockets 以及其他需要与每个用户建立长期连接的应用程序。

你好,世界

下面是一个简单的 "Hello, world" Tornado 网页应用程序示例:

import asyncio

import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

async def main():
    app = make_app()
    app.listen(8888)
    await asyncio.Event().wait()

if __name__ == "__main__":
    asyncio.run(main())

本例不使用任何Tornado的异步特性;请参见 simple chat room .

线程和wsgi

Tornado与大多数python Web框架不同。它不是基于 WSGI ,并且通常每个进程只运行一个线程。见 用户指南 更多关于Tornado的异步编程方法。

虽然在 tornado.wsgi 模块,它不是开发的重点,大多数应用程序都应该使用Tornado自己的接口(例如 tornado.web )直接而不是使用wsgi。

通常,Tornado代码不是线程安全的。Tornado中唯一可以安全地从其他线程调用的方法是 IOLoop.add_callback . 您也可以使用 IOLoop.run_in_executor 在另一个线程上异步运行阻塞函数,但请注意,传递给 run_in_executor 应避免引用任何 Tornado 对象。 run_in_executor 是与阻塞代码交互的推荐方法。

asyncio 整合

Tornado与标准库集成 asyncio 模块和共享相同的事件循环(默认情况下,从Tornado 5.0开始)。通常,设计用于 asyncio 可以与 Tornado 自由混合。

安装

pip install tornado

龙卷风列在 PyPI 并且可以安装 pip . 请注意,源发行版包括以这种方式安装Tornado时不存在的演示应用程序,因此您可能希望下载源tarball的副本或克隆 git repository 也。

必备条件 :Tornado 6.0需要使用Python3.7或更高版本(请参阅 Tornado 5.1 如果需要与Python2.7兼容)。以下可选软件包可能非常有用:

  • pycurl 由可选的 tornado.curl_httpclient . 需要libcurl 7.22或更高版本。

  • Twisted 可与中的类一起使用 tornado.platform.twisted .

  • pycares 是一个可选的非阻塞DNS解析程序,可以在线程不合适时使用。

平台 :Tornado是为类Unix平台设计的,在系统支持方面具有最佳的性能和可扩展性。 epoll (Linux) kqueue (BSD/MACOS),或 /dev/poll (索拉里斯)

Tornado也将在Windows上运行,尽管该配置没有正式支持或推荐用于生产。Windows上缺少一些功能(包括多进程模式),并且扩展性有限(即使Tornado是建立在 asyncio 支持Windows的Tornado不使用Windows上可扩展网络所需的API)。

文档

本文件也可在 PDF and Epub formats .

讨论和支持

你可以讨论龙卷风 the Tornado developer mailing list 并报告 GitHub issue tracker . 有关其他资源的链接,请访问 Tornado wiki . 新版本发布于 announcements mailing list .

Tornado 在 Apache License, Version 2.0 .

本网站和所有文档的许可使用 Creative Commons 3.0 .