¶
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 格式。
- 使用者指南
- Web 框架
- 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 issue tracker 上回報錯誤。更多資源的連結可以在Tornado wiki找到。新版本的發佈會在發佈郵件論壇上公告。
Tornado 遵循Apache License, Version 2.0授權條款。
本網站與所有文件皆遵循Creative Commons 3.0授權條款。