이미지 범위를 다운로드 할 응용 프로그램을 작성하려고합니다.대용량 파일 다운로드시 go 루틴이 멈 춥니 다
- 130 116킬로바이트 이미지 (작품)
- 50 개 500킬로바이트 이미지 (작품)
- 130 5백킬로바이트 이미지 (결국 중단)
- 230 116킬로바이트 이미지 (결국 중단)
이동 버전 go1 .9.2 darwin/amd64
package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
"sync"
)
func main() {
var urls []string
// var smallImage = "https://s3.amazonaws.com/golangplayground/116kb.jpeg" //116kb
var largeImage = "https://s3.amazonaws.com/golangplayground/SampleJPGImage_500kbmb.jpg" //500kb
for i := 0; i < 130; i++ {
urls = append(urls, largeImage)
}
var wg sync.WaitGroup
wg.Add(len(urls))
var inc = 0
for _, val := range urls {
inc += 1
go saveResourceFromURLToDisk(val, "./foo", &wg, inc)
}
wg.Wait()
fmt.Println("done.")
}
func saveResourceFromURLToDisk(url string, writeTo string, wg *sync.WaitGroup, inc int) error {
defer wg.Done()
response, err := http.Get(url)
if err != nil {
log.Fatal(err)
return err
}
defer response.Body.Close()
localPath := fmt.Sprintf("%s/%d", writeTo, inc)
file, err := os.Create(localPath)
if err != nil {
log.Fatal(err)
return err
}
defer file.Close()
_, err = io.Copy(file, response.Body)
if err != nil {
log.Fatal(err)
return err
}
fmt.Println(localPath)
return nil
}
코드에 문제가없는 것 같습니다. S3의 GET 또는 동시 다운로드 제한을 누를 가능성이 있습니다. – abhink
수백 개의 동시 연결을 열면 비효율적이며 일부 연결 또는 파일 설명자 제한에 따라 실행 중일 수 있습니다. – JimB