我想发送几个并行的 POST 请求并保存结果,但我可以看到处理不是并行的。
func process(
provider models.Provider,
query models.Query,
db *sql.DB,
ch chan<- models.SocketResource
) {
body, raw, err := types.PostJSON(urlStr, string(jsonData), map[string]string{"Content-Type": "application/json"}, types.Proxy{}, jar)
response := models.RequestAnswers{}
_ = json.Unmarshal([]byte(body), &response)
ch<- response
}
func getList() {
ch := make(chan models.SocketResource)
for _, provider := range providers {
go process(provider, query, db, ch)
}
var answers []models.SocketResource
for range providers {
start := time.Now()
log.Printf("Start time: %s", start)
res := <-ch
answers = append(answers, res)
}
}
此代码通常工作 ~ 30 秒,但我预计将近 5 秒。我已经记录了开始时间并收到了这样的数据:
2023/02/20 15:58:41 Start time: 2023-02-20 15:58:41.852120551 +0300 +03 m=+10.902878529
2023/02/20 15:58:41 Start time: 2023-02-20 15:58:41.86559013 +0300 +03 m=+10.916348048
2023/02/20 15:58:41 Start time: 2023-02-20 15:58:41.866299284 +0300 +03 m=+10.91705718
22023/02/20 15:58:46 Start time: 2023-02-20 15:58:46.713829448 +0300 +03 m=+15.764587376
2023/02/20 15:58:57 Start time: 2023-02-20 15:58:57.952024136 +0300 +03 m=+27.002782084
2023/02/20 15:59:06 Start time: 2023-02-20 15:59:06.014041727 +0300 +03 m=+35.064799666
2023/02/20 15:59:06 Start time: 2023-02-20 15:59:06.384299333 +0300 +03 m=+35.435057271
2023/02/20 15:59:06 Start time: 2023-02-20 15:59:06.778590117 +0300 +03 m=+35.829348065
2023/02/20 15:59:11 Start time: 2023-02-20 15:59:11.866662932 +0300 +03 m=+40.917420830
2023/02/20 15:59:11 Start time: 2023-02-20 15:59:11.866689523 +0300 +03 m=+40.917447421
如果我添加更多提供者,first 和 last 之间的间隔通常是 ~30 秒