多线程下载,文件数量未知

foreveriuu · · 1744 次点击
stevewang
耶和华是我的牧者,我必不至缺乏。
用channel配合生产者/消费者模式,就可以控制下载的gorountine数目。 大致流程如下: ``` const ( ThreadCount = 3 ) func main() { ch := make(chan string, ThreadCount) var wg sync.WaitGroup for i := 0; i < ThreadCount; i++ { wg.Add(1) go func() { for url := range ch { download(url) } wg.Done() }() } urls := []string{ "http://www.host.com/AAA001.dat", "http://www.host.com/AAA002.dat", //... } // 分派下载任务 for _, url := range urls { ch <- url } close(ch) wg.Wait() } ```
#1
更多评论
多谢解答。但是下载数量未知如何解决呢?比如AAA是到了AAA247.dat,但是预先不知道数量,只有尝试AAA247.dat下载失败才知道需要结束,其它BBB、CCC也是如此。
#2
stevewang
耶和华是我的牧者,我必不至缺乏。
和下载数量没有关系,只要把要下载的url传给channel就可以,url都处理完以后关闭channel。
#3