2015-03-16 2 views
0

У меня есть приложение WebSocketHandler в приложении Tornado. Я не уверен, что это правильный способ сделать код асинхронным.Это правильный способ вызова метода coroutine в рамках Tornado?

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) 

ответ

2

Да, это правильно. Однако в некоторых случаях просто вызов сопрограммы без урока может привести к тому, что исключения будут обрабатываться неожиданными способами, поэтому я рекомендую использовать IOLoop.current().spawn_callback(self.my_coroutine_method) при вызове сопрограммы из некоротинга, подобного этому.