tornado 可以使用如下方式并行异步请求。
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response1, response2 = yield [http_client.fetch(url1),
http_client.fetch(url2)]
这个时候, 1,2 是同时发送出去的,也就是说使用这种方式,可以让 n 个请求,同时发出去,等他们都返回了再统一返回。
那么我要如何保证,其中一个请求坏了,其余的结果依旧可用?
1
HFcbyqP0iVO5KM05 2016-07-01 10:51:57 +08:00 via Android
你把右边的函数改一下,做一个 `try ... except ...`,保证无论如何函数都有返回。
|
2
kinghui 2016-07-01 13:40:52 +08:00 1
加个 wrapper 包装一下:
``` @gen.croutine def _proxy(method, *args, **kwargs): try: ret = yield method(*args, **kwargs) except ErrorYourWantCatch: # logging or something else ret = None raise gen.Return(ret) @gen.coroutine def get(self): http_client = AsyncHTTPClient() response1, response2 = yield [_proxy( http_client.fetch, url1), _proxy( http_client.fetch, url2)] ``` |
3
kinghui 2016-07-01 13:43:15 +08:00
@kinghui <script src="https://gist.github.com/coldnight/b5114a570f148c7aa124e4da3fb362a8.js"></script>
|