tornado调用一系列阻塞的方法时候如何保持异步的效果呢?,tornado异步,用tornado开发re
tornado调用一系列阻塞的方法时候如何保持异步的效果呢?,tornado异步,用tornado开发re
用tornado开发restful服务,需要调用已有的诸多函数。怎样保持tornado的异步方式,是否需要对现有函数做修改?
一般情况下,只会对原有函数中操作耗时的处理进行异步装饰,例如网络请求
from tornado.gen import coroutine, Future, Return@coroutine # 首先是协程装饰器def http_request(url): response = yield get_url(url) # yield 调用 ...
需要注意的是,一旦使用异步,那调用到的函数返回值必须是Future类型或者使用croutine和Return()返回。
例如上面用到的get_url方法,要用以下的方式返回结果
def get_url(url): future = Future() ... return future @coroutinedef get_url(url): ... raise Return(result) # 这里的result是获取到的结果
异步虽然好用,但是缺点就是一旦用了,调用的时候都要考虑异步,风格要一致…
如果是阻塞方法,应该丢给外部队列比如celery去处理,不要使用多线程worker。
如果是网络io导致的阻塞,可以利用tornado 的asyncHttpClient,将阻塞请求变为非阻塞
编橙之家文章,
相关内容
- Flask上下文和请求上下文要如何理解,flask上下文,在学
- Pythonq将多个音频解码并合成完整音频的思路,pythonq思
- Python 怎样调用当前文件最后声明的类与方法?,pytho
- 请帮我指点Python使用Cookie请求页面的操作,pythoncookie
- 求助wxpython创建绑定单击事件一级菜单的方法,wxpytho
- python分步执行adb命令怎么样实现?,python分步adb命令
- Python要将文件保存为utf-8带BOM格式如何操作,,s = u中文
- Python Requests方法模拟登陆豆瓣FM不成功,pythonrequests,想
- Python Django利用dwebsocket实现后台数据 实时更新到网页前
- Python有SQL中group by推导吗,pythongroup,现查询基于mongoen
评论关闭