Golang 고루틴을 사용하여 여러 파일을 병렬로 다운로드
고루틴을 사용하여 파일을 병렬로 다운로드하고 저장할 수 있나요? 시연을 위해 Golang으로 작성된 제공된 코드 조각을 자세히 살펴보겠습니다.
<code class="go">import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) ... func main() { ... var wg sync.WaitGroup for i, file := range flr.FileList { wg.Add(1) go download_file(file, tr, &wg) if i >= 2 { break } } wg.Wait() } ... func download_file(file File, token TokenResponse, wg *sync.WaitGroup) { ... wg.Done() }</code>
해결 방법 이해:
이 문제는 모든 작업이 완료되기 전에 기본 고루틴이 종료되기 때문에 발생합니다. 파일 다운로드가 완료되도록 생성된 고루틴. 이 문제를 해결하기 위해 실행 중인 고루틴 수를 추적하는 sync.WaitGroup이 도입되었습니다. 기본 고루틴이 종료되기 전에 모든 고루틴(동시에 실행 중)이 완료될 때까지 기다립니다.
각 고루틴 내에서 wg.Add 메서드는 개수를 증가시켜 새 고루틴 생성을 나타냅니다. 파일을 성공적으로 다운로드한 후 wg.Done 메서드가 호출되어 개수를 줄이고 고루틴 완료를 알립니다.
모든 고루틴이 완료되면 기본 고루틴의 wg.Wait() 메서드가 잠금 해제되고 메인 프로그램을 진행할 수 있습니다.
위 내용은 다음은 제공된 기사를 기반으로 한 몇 가지 제목 옵션입니다. 질문과 답변 형식에 중점을 두고 고루틴과 병렬 파일 다운로드를 강조합니다. **옵션 1(고루틴에 중점):**의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!