这是一个创建于 3566 天前的主题,其中的信息可能已经有所发展或是发生改变。
试了下使用 tornado 的 coroutine 和自已定义的一个 decorator 一起使用,但发现不会在 yield 出挂起,而是向上返回。
就是说,如果有多层嵌套的话,在运行到最底层的 yield 处之后,程序不会运行 yield 之后的代码,而是向上返回一个空的 future ,而且上层代码也不会执行 yield 之后的代码而是继续向上返回。
不知道有没有大神能给出一个例子,将 coroutine 和自定义的装饰器一起使用的例子,或者说能指出怎么使用。谢谢
3 条回复 • 2016年04月12日 10:17:53 +08:00
calease
1
calease 2016 年 4 月 7 日
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")
放下面的情况比较复杂一时说不完,且听下回分解。
wingyiu
3
wingyiu 2016 年 4 月 12 日
@
calease import
inspect.isgeneratorfunction(foo)
如果是就 yield 咯 不是就随意咯