tornado 最近的4.0版本進行了較大的更新,這個大版本有哪些亮點?
近期facebook開源的tornado發布了4.0版,按照release note這一版的改動較大,那麼這個版本是否有必要升級,他有哪些值得關注的亮點?
生產環境下主要用於 HTTP / WebSocket 伺服器,對此而言我覺得這個版本沒啥亮點。
對我有用的估計是那個新增的 tornado.tcpclient 模塊,可以簡化客戶端的編寫。
下面是隨手寫的個例子,向本地的 Redis 伺服器調用 "set a 1" 和 "get a",並輸出結果,整個過程是非同步的:
from contextlib import closing
from tornado.gen import coroutine
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.tcpclient import TCPClient
from tornado.web import Application, RequestHandler
class HomeHandler(RequestHandler):
@coroutine
def get(self):
self.set_header(Content-Type, text/plain)
client = TCPClient()
stream = yield client.connect(127.0.0.1, 6379)
with closing(stream):
stream.write(set a 1
)
data = yield stream.read_until(
)
self.write(data)
self.flush()
stream.write(get a
)
data = yield stream.read_until(
)
self.write(data)
data = yield stream.read_until(
)
self.finish(data)
def main():
application = Application(
[(/, HomeHandler)],
debug=True)
http_server = HTTPServer(application)
http_server.listen(8888)
IOLoop.instance().start()
if __name__ == "__main__":
main()
結果:
+OK
$1
1
ab 測試了一下,單進程在我的 MBP 上有 600 多 QPS,看上去還不錯。
這是一些重大的更新,What』s new in Tornado 4.0。
亮點的話我認為有
- Coroutines are now faster and are used extensively throughout Tornado itself.
- Future 的統一化管理
- New module tornado.tcpclient creates TCP connections with non-blocking DNS, SSL handshaking, and support for IPv6.
stream流式上傳大文件
yield client.connect 後返回future 對象
with語句執行不了
推薦閱讀:
※知乎為什麼要選擇用Tornado做為web開發框架,非同步非阻塞模式在此起到了作用?
※如何理解Tornado中的協程模塊(gen.coroutine)?
※python多進程數量對應核數?
※請問如何處理tornado模板和angular.js的 {{ }} 表達式衝突問題?
※如何評價知乎開始將核心業務向 Go 技術棧遷移?