Tornado 的异步 怎么写的
时间: 2020-08-21来源:V2EX
前景提要
看得教程一头雾水, 只能理解那个自带的 http 请求, 看了很久也没看到有比如数据库查询, 文件处理什么的其他例子, 后来去看看其他教程, 实现倒算是勉强实现了, 但感觉也太复杂了吧? ?
就比如例子中的我假设有个长耗时的任务, 怎么写才会简单点? import tornado.ioloop import tornado.web import time import _thread # 模拟耗时任务 def long_work(arg): time.sleep(5) yield arg * 1024 def mycoroutine(func): def wrapper(self): gen = func(self) work_gen = next(gen) def fun(): result = next(work_gen) try: gen.send(result) except StopIteration: pass _thread.start_new_thread(fun, ()) return wrapper class IndexHandler(tornado.web.RequestHandler): @tornado.web.asynchronous @mycoroutine def get(self): arg = 10 # 假设请求的参数 result = yield long_work(arg) self.finish(f'<h1>Index {result}</h1>') class SyncHandler(tornado.web.RequestHandler): def get(self): self.write('<h1>SyncHandler</h1>') def make_app(): return tornado.web.Application([ (r'/', IndexHandler), (r'/sync', SyncHandler) ]) if __name__ == '__main__': app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行