tornado是用Python编写的一个强大的、可扩展的Web服务器和异步网络库
Tornado 和现在的主流 Web 服务器框架,明显的优势在于:它是非阻塞式服务器,而且速度相当快(如果配置正确,它可以处理10,000多个并发连接)
推荐入门书籍:
http://demo.pythoner.com/itt2zh/index.html
https://www.cnblogs.com/yezigege/p/13447319.html
这本书中包含了tornado的安装、搭建、以及基础操作,适合初学着
1. 同步
会有阻塞的困扰,请求量大的时候,发送请求到获得返回的搜索数据之间有相当大的滞后,这意味着同时只能提供一个请求。
例如:
Tornado的httpclient模块:我们将使用这个模块的HTTPClient类来执行HTTP请求
class IndexHandler(tornado.web.RequestHandler):
def get(self):
query = self.get_argument('q')
client = tornado.httpclient.HTTPClient()
response = client.fetch(url + urllib.urlencode({"q": query, "result_type": "recent", "rpp": 100}))
body = json.loads(response.body)
...
这个例子里我们实例化了一个Tornado的HTTPClient类,然后调用结果对象的fetch方法。fetch方法的同步版本使用要获取的URL作为参数。
2. 异步
基础异步调用:Tornado包含一个AsyncHTTPClient类,可以执行异步HTTP请求。
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
query = self.get_argument('q')
client = tornado.httpclient.AsyncHTTPClient()
client.fetch(url + urllib.urlencode({"q": query, "result_type": "recent", "rpp": 100}),
callback=self.on_response)
AsyncHTTPClient的fetch方法并不返回调用的结果。取而代之的是它指定了一个callback参数;你指定的方法或函数将在HTTP请求完成时被调用,并使用HTTPResponse作为其参数。
需要注意的是@tornado.web.asynchronous装饰器的使用(在get方法的定义之前)以及在回调方法结尾处调用的self.finish()。使用@tornado.web.asynchonous装饰器时,Tornado永远不会自己关闭连接。你必须在你的RequestHandler对象中调用finish方法来显式地告诉Tornado关闭连接。(否则,请求将可能挂起,浏览器可能不会显示我们已经发送给客户端的数据。)