Я только что подумал о неблокирующей инфраструктуре торнадо и программировании, управляемом событиями. На самом деле я пишу простое веб-приложение, которое обращается к HTTP-API внешнего веб-сервиса. Я понимаю, почему я должен называть этот API неблокирующим. Но есть ли недостатки, если я сделаю только первый вызов неблокирующим, чтобы IOLoop мог зацикливаться дальше?
Например:
@tornado.web.asynchronous
def get(self):
nonblocking_call1(self._callback)
def _callback(self, response):
self.write(str(response))
self.write(str(blocking_call2()))
self.write(str(blocking_call3()))
self.finish()
vs.
@tornado.web.asynchronous
def get(self):
nonblocking_call1(self._nonblocking_callback1)
def _callback1(self, response):
self.write(str(response))
nonblocking_call2(self._nonblocking_callback2)
def _callback2(self, response):
self.write(str(response))
nonblocking_call3(self._nonblocking_callback3)
def _callback3(self, response):
self.write(str(response))
self.finish()