tornado.gen是一个基于生成器的接口,使开发在异步环境下更加容易。简单点说就是,该包是一个协程的实现。
仔细对比如下两段代码
|
|
提供的接口
接口 | 功能 | 特殊说明 |
---|---|---|
coroutine(func, replace_callback=True) | 异步生成器的装饰器 | |
engine(func) | 基于回调的异步生成器的装饰器 | |
Return(value=None) | 特殊的异常,从coroutine中返回一个值 | |
with_timeout(timeout, future, io_loop=None, quiet_exceptions=()) | 为future设置超时时间 | |
exception TimeoutError | ||
sleep(duration) | 非阻塞的睡眠 | |
monent | 允许被yield的一个特殊对象,为了让IOLoop执行一个迭代 | |
WaitIterator(*args, **kwargs) | ||
multi(children, quiet_exceptions=()) | 允许多个异步操作并行执行 | |
multi_future(children, quite_exception=()) | ||
Task(func, *args, **kwargs) | 调整一个基于回调的异步函数,为了在协程中使用 | |
class Arguments | ||
covert_yielded(yielded) | 将一个yield对象转换为Future | |
maybe_future(x) | 转换x为Future | |
is_coroutine_function(func) | 检测函数是否是协程函数 |
预备知识
在看tornado代码之前,先了解下python里的生成器是怎么样的。
|
|
源码分析
|
|
看下Runner
|
|