Golang에서 고루틴을 사용하여 병렬로 여러 파일 다운로드
이 기사에서는 Golang에서 고루틴을 활용하여 여러 파일을 다운로드하는 방법을 살펴보겠습니다.
Dropbox에서 파일을 다운로드하려고 시도하는 다음 코드 조각을 고려하세요.
<code class="go">package main import ( "encoding/json" "fmt" "io" "io/ioutil" "net/http" "net/url" "os" "path/filepath" "sync" ) ... func main() { ... for i, file := range flr.FileList { go download_file(file, tr) if i >= 2 { break } } ... }</code>
그러나 고루틴을 사용하여 이 코드를 실행하려고 하면 실패합니다. 이는 파일 다운로드를 담당하는 고루틴이 작업을 완료하기 전에 기본 고루틴이 종료되기 때문입니다.
이 문제를 해결하고 기본 고루틴이 종료되기 전에 고루틴이 완료될 때까지 기다리도록 하려면 동기화를 사용할 수 있습니다. WaitGroup은 다음과 같습니다.
<code class="go">package main import ( ... "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() ... }</code>
여기서 sync.WaitGroup을 생성하고 이를 사용하여 아직 작업을 완료하지 않은 고루틴 수를 추적합니다. 이를 통해 기본 고루틴은 종료하기 전에 모든 고루틴이 작업을 완료할 때까지 기다릴 수 있습니다.
수정된 download_file 함수에서 wg.Done()을 호출하여 고루틴 완료를 알리고 wg 카운터를 감소시킵니다.
고루틴과 대기 그룹을 활용하면 여러 파일을 동시에 효과적으로 다운로드할 수 있어 다운로드 프로세스의 전반적인 효율성이 향상됩니다.
위 내용은 Golang에서 여러 파일을 동시에 다운로드하기 위해 Goroutines 및 WaitGroups를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!