Tornado Web Server

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

你好,世界

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

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的异步特性;请参见 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

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

先决条件 :Tornado 6.0需要python 3.5.2或更高版本(请参见 Tornado 5.1 如果需要与python 2.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)。

在Windows上,Tornado需要 WindowsSelectorEventLoop . 这是Python3.7及更旧版本中的默认值,但Python3.8默认为与Tornado不兼容的事件循环。在带有python 3.8的Windows上使用tornado的应用程序必须调用 asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) 在他们开始的时候 main 文件/功能。

文档

本文件也可在 PDF and Epub formats .

讨论和支持

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

Tornado 在 Apache License, Version 2.0 .

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