В простом асинхронном случае обработчик может выглядеть так:
@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
.