试了下使用 tornado 的 coroutine 和自已定义的一个 decorator 一起使用,但发现不会在 yield 出挂起,而是向上返回。 就是说,如果有多层嵌套的话,在运行到最底层的 yield 处之后,程序不会运行 yield 之后的代码,而是向上返回一个空的 future ,而且上层代码也不会执行 yield 之后的代码而是继续向上返回。 不知道有没有大神能给出一个例子,将 coroutine 和自定义的装饰器一起使用的例子,或者说能指出怎么使用。谢谢
1
calease 2016-04-07 13:32:06 +08:00
decorator 只不过是把原先的 function 替换成 wrapper ,唯一要注意的就是你的 decorator 最好放在上面,并且自己也要是 coroutine 。比如:
def sleeper(func): @coroutine def wrapper(*args, **kwargs): yield tornado.gen.sleep(1) # here func is actually a get wrapped by coroutine, so yield it yield func(*args, **kwargs) return wrapper @sleeper @coroutine def get(*args, **kwargs): # code goes here self.write("just get it") 放下面的情况比较复杂一时说不完,且听下回分解。 |