简体   繁体   中英

Is this right way to call coroutine method in Tornado framework?

I have WebSocketHandler in my Tornado application. I am not sure is this a right way to make code asynchronous.

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)

Yes, this is correct. However, in some cases simply calling a coroutine without yielding can cause exceptions to be handled in unexpected ways, so I recommend using IOLoop.current().spawn_callback(self.my_coroutine_method) when calling a coroutine from a non-coroutine like this.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM