语言(python)
现在有这么一种情况。
web 框架 响应 来自客户端的请求的 handler 里面会返回一个列表记录 list1,
对于 list1 的第一个元素 ele1 要请求 url1,
list1 的第二个元素 ele2 要请求 url2,
以此类推,平均一个 url 请求要 200-300ms ,超时调成 1s
所以如果 list1 的长度为 10 的话,如果迭代请求的话,总时间为 5S 左右。
你们是怎么处理这种情况的?
语言(python)
现在有这么一种情况。
web 框架 响应 来自客户端的请求的 handler 里面会返回一个列表记录 list1,
对于 list1 的第一个元素 ele1 要请求 url1,
list1 的第二个元素 ele2 要请求 url2,
以此类推,平均一个 url 请求要 200-300ms ,超时调成 1s
所以如果 list1 的长度为 10 的话,如果迭代请求的话,总时间为 5S 左右。
你们是怎么处理这种情况的?
|
owt5008137Mar 21, 2017 via Android
1
那就并发请求然后 wait 到所有请求完成呗
|
|
freestyleMar 21, 2017
2
这个时候适合用 tornado 的 ayncHttpClient 啦 http://www.tornadoweb.org/en/stable/httpclient.html#tornado.httpclient.AsyncHTTPClient
接受传入 loop, 非 tornado 框架也可以使用 比如 |
|
3
@owt5008137 用 multiprocess?
|
|
windfarerMar 21, 2017 via Android
4
gevent 的话用 grequests
|
|
HFcbyqP0iVO5KM05Mar 21, 2017 via Android
5
如果你的框架是 tornado , 可以用它的 AsyncHttpClient
如果你的框架是 flask ,把这些 url 请求任务丢到 celery ,把请求情况保存到 redis ,所有请求都完成了再回调 |
|
FinestMar 21, 2017
6
并发请求之后合并结果
|
|
vjnjcMar 21, 2017
7
如果是因为网慢或者 response 大的话。。。即使请求并发了,结果还是快不起来
|
|
libraeMar 21, 2017 via iPhone
8
这种情况的话,我们一般用这个 [Go.IoT]( https://goiot.cc) 做一个中间件,
可以同时触发多个 http 请求,全都完成后执行下一步。 参考:[异步多线请求]( https://bb.goiot.cc/uploads/files/1487329416416-flow.png) |
|
9
@librae 效果是你那种效果,难道 golang 也需要中间件来完成这种功能吗
|
|
owt5008137Mar 21, 2017 via Android
11
多线程也行啊
|
|
anshengMar 22, 2017
12
难道不是 gevent?
|