文件格式为
http://www.host.com/AAA001.dat
http://www.host.com/AAA002.dat
...
http://www.host.com/BBB001.dat
http://www.host.com/BBB002.dat
文件为AAA、BBB、CCC开头,后面为递增数字,数量未知。
希望能3线程下载,不清楚如何实现,是否要每个下载都启动一个新的goroutine来处理?
另外你的需求我不太了解。
“每下载成功一个文件,就预测后续的3个文件可能存在,尝试下载”。
是不是如果1下载成功,就要下载2,3,4?如果4又下载成功,就要下载5,6,7?如果是这样,不是等于预测后续的一个文件就可以了?为什么要预测3个?
#9
更多评论
用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