В простом асинхронном случае обработчик может выглядеть так:
@tornado.web.authenticated
@tornado.web.asynchronous
def post(self):
AsyncHTTPClient().fetch("http://api.example.com/", self.on_post_response)
def on_post_response(self, response):
self.render("template.html", status=response.error)
Однако я дошел до того, что мне нужно выполнить две асинхронные операции (извлечь API удаленного отдыха, а затем отправить почту с результатами) перед возвратом к клиенту.
Интересно, есть ли способ «сделать это», например добавив обратные вызовы в очередь (например, ioloop.add_callback
) или мне нужно составить пользовательский объект, который будет управлять этими задачами и их состоянием, и вызывать его из post
.