【发布时间】:2021-01-17 15:37:20
【问题描述】:
我打算用 V 编写我的爬虫,我需要每秒发送大约 2500 个请求,但不知道我做错了什么,它应该同时发送,但现在速度非常慢。感觉我做错了什么,但我想不通。
import net.http
import sync
import time
fn send_request(mut wg sync.WaitGroup) ?string {
start := time.ticks()
data := http.get('https://google.com')?
finish := time.ticks()
println('Finish getting time ${finish - start} ms')
wg.done()
return data.text
}
fn main() {
mut wg := sync.new_waitgroup()
for i := 0; i < 50; i++ {
wg.add(1)
go send_request(mut wg)
}
wg.wait()
}
输出:
...
Finish getting time 2157 ms
Finish getting time 2173 ms
Finish getting time 2174 ms
Finish getting time 2200 ms
Finish getting time 2225 ms
Finish getting time 2380 ms
Finish getting time 2678 ms
Finish getting time 2770 ms
V 版本:0.1.29
系统:Ubuntu 20.04
【问题讨论】:
-
我认为操作系统对一次可以建立多少个连接也有限制。我在 Linux 和 Mac 上遇到过这个问题。话虽如此,您可能希望实现一个队列来一次执行 100 个操作。
-
可能需要代理轮换器。你的ip可能被限制了。
net.httpinv支持代理吗?
标签: concurrency vlang