惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
J
Java Code Geeks
雷峰网
雷峰网
WordPress大学
WordPress大学
L
LangChain Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
腾讯CDC
GbyAI
GbyAI
罗磊的独立博客
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
F
Fortinet All Blogs
Y
Y Combinator Blog
V
V2EX
A
About on SuperTechFans

Tornado

docker 多进程部署 tornado Tornado 如何拿到传输的文件流 tornado 下 ckeditor 图片上传问题 Tornado 异步怎么写的? tornado 怎么能确保端口挂了 服务也不会停止? Tornado 路由有什么好方法,一个一个写太麻烦了,有没有根据 url 和注解匹配的方法呢 Tornado V4.5 release pypy 拿到赞助之后出了支持 Python3.5 的版本 请教 tornado 文件上传问题 tornado 做后台服务,如果前端没有用 cookie. tornado 优秀项目推荐 问一个 tornado 解决阻塞的方案问题? tornaqiniu(基于 tornado 的异步七牛 sdk) tornado 并行异步,如何保证在只有部分请求成功后,结果依旧可用。 nginx 反向代理 tornado,如何 location 首页u rl? 问一个关于 tornado 异常处理的新手问题 tornado 的 coroutine 能和自定义的装饰器一起使用吗?? Tornado 并发数很低,正常么? 阅读 Tornado 源码过程中的一个疑惑,求解答 gtornado - tornado 中 pymysql, pymemcache, storm orm 支持库 Tornado 如何组织中大型项目,你们都是怎么样做的? tornado 跑不通,小白求帮忙 Tornado 4.3 发布 Tornado 官方怎么不好好维护一个 sql 的异步数据库驱动? 关于 tornado 阻塞的问题 tornado 的 mysql 异步驱动性能测试 pypy 之 tornado tornado 多个 url RequestHandler 类的 get_current_user() 方法覆写无效 tornado 动态添加 url 的问题
Tornado 的异步 怎么写的
aoscici2000 · 2019-01-15 · via Tornado

看得教程一头雾水, 只能理解那个自带的 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()