我知道 tornado 可以用如下方式,同时并发 n 个请求:
response1, response2,... responsen = yield [http_client.fetch(url1) , http_client.fetch(url2), ...... ,http_client.fetch(url2) ]
等到 n 个请求都响应了之后,会返回给程序控制权,那么我的问题是:
1.如果我想其中一个有结果了,就返回 yield 继续执行,应该怎么实现?
2.如果我要让其中 i 个请求有结果了就返回呢?
1
sivacohan 2016-10-20 00:00:59 +08:00 via iPad
你是方法 A 说发出 n 个请求,当 i 个请求返回时( i 小于等于 n )。放弃其余请求,方法 A 返回。
这种情况下你可以注册多个 handler 扔到 ioloop 里,然后搞个计数器。 或者使用 threading ,然后循环坚持每个线程有没有返回。 第一种复杂点,第二种代码少,但实际上是错的, for 循环会阻塞。 |
2
husinhu 2016-10-20 11:17:33 +08:00
yieldpoints.waitany()
|
3
mulog 2016-10-20 13:56:48 +08:00
|
4
NxnXgpuPSfsIT 2016-10-28 23:09:33 +08:00
|
5
aiqier OP @NxnXgpuPSfsIT 这两个帖子都是我发的,为了能更好的收集到问题,谢啦。。。
|