¶
Tornado 是一個 Python 網頁框架和非同步網路函式庫,最初由 FriendFeed 開發。藉由使用非阻塞式網路 I/O,Tornado 可以擴展到數萬個開啟的連線,使其非常適合 長輪詢、WebSocket 和其他需要與每個使用者建立長期連線的應用程式。
快速連結¶
Hello, world¶
這是 Tornado 的一個簡單 “Hello, world” 範例網頁應用程式
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 網頁框架不同。它不是基於 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 時,來源發行版本包含的範例應用程式不會出現,因此您可能希望下載來源 tarball 的副本或克隆 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 格式。
- 使用者指南
- 網頁框架
- HTTP 伺服器與客戶端
- 非同步網路
- 協程與並行
- 與其他服務整合
- 工具
- 常見問題
- 版本說明
- Tornado 6.4.1 的新功能
- Tornado 6.4.0 的新功能
- Tornado 6.3.3 的新功能
- Tornado 6.3.2 的新功能
- Tornado 6.3.1 的新功能
- Tornado 6.3.0 的新功能
- Tornado 6.2.0 的新功能
- Tornado 6.1.0 的新功能
- Tornado 6.0.4 的新功能
- Tornado 6.0.3 的新功能
- Tornado 6.0.2 的新功能
- Tornado 6.0.1 的新功能
- Tornado 6.0 的新功能
- Tornado 5.1.1 的新功能
- Tornado 5.1 的新功能
- Tornado 5.0.2 的新功能
- Tornado 5.0.1 的新功能
- Tornado 5.0 的新功能
- Tornado 4.5.3 的新功能
- Tornado 4.5.2 的新功能
- Tornado 4.5.1 的新功能
- Tornado 4.5 的新功能
- Tornado 4.4.3 的新功能
- Tornado 4.4.2 的新功能
- Tornado 4.4.1 的新功能
- Tornado 4.4 的新功能
- Tornado 4.3 的新功能
- Tornado 4.2.1 的新功能
- Tornado 4.2 的新功能
- Tornado 4.1 的新功能
- Tornado 4.0.2 的新功能
- Tornado 4.0.1 的新功能
- Tornado 4.0 的新功能
- Tornado 3.2.2 的新功能
- Tornado 3.2.1 的新功能
- Tornado 3.2 的新功能
- Tornado 3.1.1 的新功能
- Tornado 3.1 的新功能
- Tornado 3.0.2 的新功能
- Tornado 3.0.1 的新功能
- Tornado 3.0 的新功能
- Tornado 2.4.1 的新功能
- Tornado 2.4 的新功能
- Tornado 2.3 的新功能
- Tornado 2.2.1 的新功能
- Tornado 2.2 的新功能
- Tornado 2.1.1 的新功能
- Tornado 2.1 的新功能
- Tornado 2.0 的新功能
- Tornado 1.2.1 的新功能
- Tornado 1.2 的新功能
- Tornado 1.1.1 的新功能
- Tornado 1.1 的新功能
- Tornado 1.0.1 的新功能
- Tornado 1.0 的新功能
討論與支援¶
您可以在Tornado 開發者郵件論壇上討論 Tornado,並在 GitHub 問題追蹤器上回報錯誤。其他資源的連結可以在 Tornado 維基上找到。新版本會在公告郵件論壇上發布。
Tornado 依照 Apache License, Version 2.0 授權條款提供。
本網站和所有文件均依照 Creative Commons 3.0 授權條款提供。