Tornado Web 伺服器

Tornado 是一個 Python Web 框架與非同步網路函式庫,最初由 FriendFeed 開發。透過使用非阻塞式的網路 I/O,Tornado 可以擴展到數萬個開啟的連線,使其非常適合用於長輪詢WebSockets 和其他需要與每個使用者維持長時間連線的應用程式。

Hello, world

以下是一個簡單的 Tornado “Hello, world” 範例 Web 應用程式

import asyncio
import tornado

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 的非同步功能;若要了解非同步功能,請參閱這個簡單的聊天室

執行緒與 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 整合

Tornado 與標準函式庫 asyncio 模組整合,並共享相同的事件迴圈(自 Tornado 5.0 以來的預設設定)。一般來說,為與 asyncio 一起使用的函式庫可以與 Tornado 自由混合使用。

安裝

pip install tornado

Tornado 列在 PyPI 中,可以使用 pip 安裝。請注意,原始碼發行版本包含透過這種方式安裝 Tornado 時不存在的示範應用程式,因此您可能還希望下載原始碼壓縮包的副本或複製 git 儲存庫

先決條件:Tornado 6.3 需要 Python 3.8 或更新版本。以下的可選套件可能會很有用

  • pycurl 由可選的 tornado.curl_httpclient 使用。需要 Libcurl 7.22 或更高版本。

  • pycares 是一個替代的非阻塞 DNS 解析器,可以在不適合使用執行緒時使用。

平台:Tornado 是為類 Unix 平台設計的,在支援 epoll (Linux)、kqueue (BSD/macOS) 或 /dev/poll (Solaris) 的系統上具有最佳效能和可擴展性。

Tornado 也可以在 Windows 上執行,儘管此配置未獲得官方支援,也不建議用於生產環境。某些功能在 Windows 上缺失(包括多程序模式),並且可擴展性受到限制(即使 Tornado 是建立在支援 Windows 的 asyncio 之上,Tornado 也沒有使用在 Windows 上實現可擴展網路所需的 API)。

文件

此文件也提供 PDF 和 Epub 格式

討論與支援

您可以在Tornado 開發者郵件論壇上討論 Tornado,並在 GitHub issue tracker 上回報錯誤。更多資源的連結可以在Tornado wiki找到。新版本的發佈會在發佈郵件論壇上公告。

Tornado 遵循Apache License, Version 2.0授權條款。

本網站與所有文件皆遵循Creative Commons 3.0授權條款。