1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| type LineGraber struct { ConcurrentNum int `json:"concurrent_num"` }
func (grab LineGraber) Work() {
concurrentNum := grab.ConcurrentNum if concurrentNum <= 0 { concurrentNum = 5 }
sem := make(chan struct{}, concurrentNum)
taskLst := grab.buildTaskLst()
chanRespv := make(chan string, len(taskLst))
total := len(taskLst)
var wg sync.WaitGroup for idx, key := range taskLst { wg.Add(1) go func(taskv string, i int) { defer func() { wg.Done() <-sem }() sem <- struct{}{} grab.processTask(taskv, oneproxy, chanRespv)
}(key, idx) }
wg.Wait() close(chanRespv)
for respv := range chanRespv { var respResult RespResult err := json.Unmarshal([]byte(respv), &respResult) if err != nil { continue }
}
}
|