tornado异步:
下面两个例子展示阻塞:
# 下面两个例子展示阻塞
class StuHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
time.sleep(30)
self.write("stu")
class HomeHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write("home")
回调的异步:
# 回调的异步
class StuHandler2(tornado.web.RequestHandler):
def on_response(self, response):
if response.error:
self.send_error(500)
else:
print("6666")
self.write("6666")
# 手动关闭通道
self.finish()
# 不关闭通道
@tornado.web.asynchronous
def get(self, *args, **kwargs):
# time.sleep(30)
url = "http://www.baidu.com"
# 创建客户端
client = AsyncHTTPClient()
client.fetch(url, self.on_response)
self.write("stu2")
class HomeHandler2(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write("home2")
协程的异步1:
# 协程的异步1
class StuHandler3(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self, *args, **kwargs):
# time.sleep(30)
url = "http://www.baidu.com"
# 创建客户端
client = AsyncHTTPClient()
res = yield client.fetch(url)
if res.error:
self.send_error(500)
else:
print("7777")
self.write("7777")
class HomeHandler3(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write("home3")
协程的异步2:
# 协程的异步2
class StuHandler4(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self, *args, **kwargs):
res = yield self.getData()
self.write(res)
@tornado.gen.coroutine
def getData(self):
url = "http://www.baidu.com"
# 创建客户端
client = AsyncHTTPClient()
res = yield client.fetch(url)
if res.error:
self.send_error(500)
else:
print("8888")
self.write("8888")
class HomeHandler4(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.write("home4")