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。

亮點的話我認為有

  1. Coroutines are now faster and are used extensively throughout Tornado itself.
  2. Future 的統一化管理

  3. 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 技術棧遷移?

TAG:Python | Tornado | Python框架 |