这是在Tornado框架中调用coroutine方法的正确方法吗?

时间:2015-03-16 21:39:23

标签: python tornado tornado-motor

我的Tornado应用程序中有WebSocketHandler。 我不确定这是使代码异步的正确方法。

class MyHandler(WebSocketHandler):
    def open(self):
        do something ...
        self.my_coroutine_method()

    @gen.coroutine
    def my_coroutine_method(self):
        user = yield db.user.find_one() # call motor asynchronous engine
        self.write_message(user)

1 个答案:

答案 0 :(得分:2)

是的,这是正确的。但是,在某些情况下,简单地调用协程而不会让步会导致异常以意想不到的方式处理,因此我建议在从非协同程序调用协程时使用IOLoop.current().spawn_callback(self.my_coroutine_method)