我只是想到了龙卷风和事件驱动编程的非阻塞基础设施。实际上,我正在编写一个简单的 webapp,它正在访问外部 web 服务的 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()
对比
@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()