首页 注册 登录
V2EX = way to explore V2EX 是一个关于分享和探索的地方
现在注册 已注册用户请 登录
Tornado Documentation http://www.v2ex.com/tornado/ Tornado on GitHub https://github.com/facebook/tornado/ Tornado Gists http://tornadogists.org/
V2EX Tornado

tornado 的 coroutine 能和自定义的装饰器一起使用吗??

triThirty · 2016 年 4 月 7 日 · 10857 次点击
这是一个创建于 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")


放下面的情况比较复杂一时说不完,且听下回分解。
triThirty
2
triThirty
OP
2016 年 4 月 7 日
@calease 感谢大神〜〜〜〜〜
wingyiu
3
wingyiu 2016 年 4 月 12 日
@calease
import
inspect.isgeneratorfunction(foo)

如果是就 yield 咯 不是就随意咯
关于 · 帮助文档 · 自助推广系统 · 博客 · API · FAQ · Solana · 2664 人在线 最高记录 6679 · Select Language 创意工作者们的社区 World is powered by solitude VERSION: 3.9.8.5 · 23ms · UTC 04:06 · PVG 12:06 · LAX 20:06 · JFK 23:06
♥ Do have faith in what you're doing.

AltStyle によって変換されたページ (->オリジナル) /