Tornado Web服務器?

Tornado 是一個python web框架和異步網絡庫,最初開發于 FriendFeed . 通過使用非阻塞網絡I/O,Tornado可以擴展到數萬個開放連接,使其非常適合 long polling , WebSockets 以及其他需要與每個用戶建立長期連接的應用程序。

你好,世界?

下面是一個簡單的 "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 .