生产环境下主要用于 HTTP / WebSocket 服务器,对此而言我觉得这个版本没啥亮点。对我有用的估计是那个新增的 tornado.tcpclient 模块,可以简化客户端的编写。
客户端操作
下面是随手写的个例子,向本地的 Redis 服务器调用 "set a 1" 和 "get a",并输出结果,整个过程是异步的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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\r\n')
data = yield stream.read_until('\r\n')
self.write(data)
self.flush()
stream.write('get a\r\n')
data = yield stream.read_until('\r\n')
self.write(data)
data = yield stream.read_until('\r\n')
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()
结果
1
2
3
+OK
$1
1
ab 测试了一下,单进程在我的 MBP 上有 600 多 QPS,看上去还不错。
tornado 4.0 的变化
http://www.tornadoweb.org/en/stable/releases/v4.0.0.html#highlights
本文网址: https://pylist.com/topic/60.html 转摘请注明来源