Асинхронный обработчик Tornado

Я пытаюсь реализовать 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 не успевает ответить. Есть ли способ с помощью торнадо временно заблокировать вызов, подобный приведенному выше?

7
задан Jarrod 8 February 2011 в 21:51
поделиться