golang异步批处理的例子

直接上代码,估计以后未必用,留着备忘吧

package main

import (
	"github.com/gogf/gf/container/glist"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"time"
)

func OnDemoRequest(r *ghttp.Request){
	maxCount := 100
	batchRequestChannel := make(chan int, maxCount)
	resultList := glist.New()

	startTime := time.Now()
	for i:=0; i< maxCount;i++{
		go doBatchRequest(i, resultList, batchRequestChannel)
	}
	
	for i:=0; i< maxCount;i++{
		<- batchRequestChannel
	}

	endTime := time.Now()
	r.Response.Write("总请求时间 ", endTime.Sub(startTime))
}

func doBatchRequest(i int, resultList *glist.List, batchRequestChannel chan int ){
	content := g.Client().GetContent("http://127.0.0.1:5000")
	resultList.PushBack(content)
	batchRequestChannel <- i
}

func main() {
	server := g.Server()
	server.BindHandler("/demo", OnDemoRequest)
	server.SetPort(7654)
	server.Run()
}
posted @ 2021-06-18 08:21  自由出土文物  阅读(263)  评论(0编辑  收藏  举报