Я пытаюсь реализовать get_current_user в RequestHandler для Tornado, но мне нужно, чтобы вызов блокировался во время ожидания асинхронного вызова моей базы данных. Украшаем звонок @ tornado.web. асинхронный не будет работать, потому что в любом случае метод get_current_user возвращается до завершения асинхронного запроса и выполнения обратного вызова запроса.
Например:
class MyHandler(BaseHandler):
@tornado.web.asynchronous
@tornado.web.authenticated
def get(self):
self.write('example')
self.finish()
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
def query_cb(self, doc):
return doc or None
database.get(username='test', password='t3st', callback=query_cb)
@ tornado.web.authenticated вызывает get_current_user, но всегда получает "None", потому что BaseHandler не успевает ответить. Есть ли способ с помощью торнадо временно заблокировать вызов, подобный приведенному выше?