搭建简单的服务器
搭建简单的服务器
建立一个路由
class AsyncHandler(tornado.web.RequestHandler):
def get(self):
self.write("async")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
(r"/async",AsyncHandler)
])
- 访问路由
http://localhost:8888/async
,出现以下画面,便是成功了
回调函数解决异步问题
代码
import time
import threading
class AsyncHandler(tornado.web.RequestHandler):
@staticmethod
def longIO(callback):
def run(cb):
print("开始异步")
time.sleep(5)
print("异步结束")
cb("异步返回的数据data")
threading.Thread(target=run,args=(callback,)).start()
@staticmethod
def callback(data):
print("开始执行回调")
print("拿到数据{}".format(data))
print("异步处理完毕")
def get(self):
self.longIO(self.callback)
self.write("async")
- 访问路由
http://localhost:8888/async
现象与原理
现象
- 我们会发现他在前端页面直接显示了
async
,看后端的打印是5秒后才出现了相关的数据

原理
- 访问路由的时候,也就是执行get请求,首先会遇到
longIO
的异步 - 因为先线程的存在,他会立即把这个异步交给线程,然后去执行下一个函数,也就是
self.write
- 当异步跑完的时候会调用
callback
函数,也就会打印出来上面的