Golang télécharge plusieurs fichiers en parallèle à l'aide de Goroutines
Est-il possible de télécharger et d'enregistrer des fichiers en parallèle à l'aide de goroutines ? Pour démontrer, examinons un extrait de code fourni écrit en 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>
Comprendre la solution :
Le problème se pose parce que la goroutine principale se termine avant tous les des goroutines sont apparues pour télécharger les fichiers terminés. Pour remédier à cela, un sync.WaitGroup est introduit pour suivre le nombre de goroutines en cours d'exécution. Avant que la goroutine principale ne se termine, elle attend que toutes les goroutines (exécutées simultanément) soient terminées.
Au sein de chaque goroutine, la méthode wg.Add incrémente le décompte, indiquant la création d'une nouvelle goroutine. Après avoir téléchargé avec succès un fichier, la méthode wg.Done est appelée, décrémentant le nombre et signalant l'achèvement d'une goroutine.
Une fois toutes les goroutines terminées, la méthode wg.Wait() dans la goroutine principale se déverrouille et permet au programme principal de continuer.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!