Tornado Web Server

Tornado是一个Python Web框架和异步网络库,最初由FriendFeed开发. 通过使用非阻塞网络I / O,Tornado可以扩展到成千上万的开放连接,使其非常适合长时间轮询WebSocket和其他需要与每个用户建立长期连接的应用程序.

Hello, world

这是Tornado的一个简单的" Hello,world"示例网络应用程序:

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的 ,并且通常每个进程只有一个线程运行. 有关Tornado异步编程方法的更多信息,请参见用户指南 .

尽管tornado.wsgi模块中提供了WSGI的某些支持,但它并不是开发的重点,大多数应用程序应编写为直接使用Tornado自己的接口(例如tornado.web )而不是使用WSGI.

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

asyncio Integration

Tornado与标准库asyncio模块集成在一起,并共享相同的事件循环(自Tornado 5.0起默认为事件循环). 通常,设计用于asyncio库可以与Tornado自由混合.

Installation

pip install tornado

龙卷风列在PyPI中 ,可以与pip一起安装. 请注意,源分发包包含以这种方式安装Tornado时不存在的演示应用程序,因此您可能希望下载源tarball的副本或克隆git存储库 .

先决条件 :Tornado 6.0需要Python 3.5.2或更高版本(如果需要与Python 2.7兼容,请参阅Tornado 5.1 ). 以下可选软件包可能会有用:

平台 :Tornado专为类Unix平台而设计,在支持epoll (Linux), kqueue (BSD / macOS)或/dev/poll (Solaris)的系统上具有最佳性能和可伸缩性.

Tornado也将在Windows上运行,尽管此配置不受官方支持或不建议用于生产环境. Windows缺少某些功能(包括多进程模式),并且可伸缩性受到限制(即使Tornado基于支持Windows的asyncio构建,Tornado也不使用Windows上可伸缩网络所必需的API).

在Windows上,Tornado需要WindowsSelectorEventLoop . 这是Python 3.7和更早版本中的默认值,但Python 3.8默认为与Tornado不兼容的事件循环. 在具有Python 3.8的Windows上使用Tornado的应用程序必须在其main文件/函数的开头调用asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) .

Documentation

This documentation is also available in PDF and Epub formats.

Discussion and support

您可以在Tornado开发人员邮件列表上讨论Tornado,并在GitHub问题跟踪器上报告错误. 可以在Tornado Wiki上找到指向其他资源的链接. 新版本在公告邮件列表中宣布 .

根据Apache许可,版本2.0可以使用Tornado.

本网站和所有文档均受Creative Commons 3.0许可.