为什么在Tornado中执行yield关键字后不执行finish语句

时间:2013-09-05 10:03:26

标签: tornado yield

这是我的代码,问题是:
控制台输出 "before, {"result" : "-1", "msg" : "Server error"}"
但它不输出 "after, {"result" : "-1", "msg" : "Server error"}"
不执行 self.finish(res)声明。

任何人都知道原因吗?我想让self.finish(res)执行。请帮帮我!

def get(self, param):
    try:
        do_something()
    except:
        res = '{"result" : "-1", "msg" : "Server error"}'
        logger.error('%s' % traceback.format_exc())
        print("before, %s" % res)
        yield tornado.gen.Task(self.captureException, exc_info=True)
        print("after, %s" % res)
    finally:
        do_something()
    self.finish(res)

1 个答案:

答案 0 :(得分:0)

如果您使用yield gen.Task(),则需要在方法中添加异步装饰器:

from tornado import gen, web

@web.asynchronous
@gen.engine
def get(self, param):
    # your get method