tornado 在同时发出 n 个请求时,如何让其中 1 个有结果就返回?

2016-10-19 22:10:58 +08:00
 aiqier

我知道 tornado 可以用如下方式,同时并发 n 个请求:

response1, response2,... responsen = yield [http_client.fetch(url1) , http_client.fetch(url2), ...... ,http_client.fetch(url2) ]

等到 n 个请求都响应了之后,会返回给程序控制权,那么我的问题是:

1.如果我想其中一个有结果了,就返回 yield 继续执行,应该怎么实现?

2.如果我要让其中 i 个请求有结果了就返回呢?

2298 次点击
所在节点    Python
5 条回复
sivacohan
2016-10-20 00:00:59 +08:00
你是方法 A 说发出 n 个请求,当 i 个请求返回时( i 小于等于 n )。放弃其余请求,方法 A 返回。

这种情况下你可以注册多个 handler 扔到 ioloop 里,然后搞个计数器。
或者使用 threading ,然后循环坚持每个线程有没有返回。

第一种复杂点,第二种代码少,但实际上是错的, for 循环会阻塞。
husinhu
2016-10-20 11:17:33 +08:00
yieldpoints.waitany()
mulog
2016-10-20 13:56:48 +08:00
NxnXgpuPSfsIT
2016-10-28 23:09:33 +08:00
aiqier
2016-10-29 21:38:43 +08:00
@NxnXgpuPSfsIT 这两个帖子都是我发的,为了能更好的收集到问题,谢啦。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/313981

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX