在tornado中,我们谈到的阻塞一般是针对网络IO,而忽略其它的阻塞(磁盘IO, 互锁)。
异步函数在结束之前就返回了,它通常在后台触发一些任务,等执行完之后再调用某些操作。有很多异步接口的实现:
- 回调函数(常用)
- 返回一个占位符(Future, Promise,Defered)
- 传送给队列
- 信号机制
协程方式编写的代码:
from tornado import gen
@gen.coroutine
def fetch_coroutine(url):
http_client = AsyncHTTPClient()
response = yield http_client.fetch(url)
raise gen.Return(response.body) #返回一个Future对象
在有yield
的生成器中可以用raise gen.Return
返回一个Futrue
对象。在Python3中可以直接用return
。