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 .