Maison >développement back-end >Golang >Comment les Goroutines et les WaitGroups peuvent-ils être utilisés pour télécharger plusieurs fichiers simultanément dans Golang ?

Comment les Goroutines et les WaitGroups peuvent-ils être utilisés pour télécharger plusieurs fichiers simultanément dans Golang ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 07:22:03394parcourir

How Can Goroutines and WaitGroups Be Used to Download Multiple Files Concurrently in Golang?

Téléchargement de plusieurs fichiers en parallèle avec des goroutines dans Golang

Dans cet article, nous explorerons comment utiliser les goroutines dans Golang pour télécharger plusieurs fichiers simultanément à partir d'un emplacement distant.

Considérez l'extrait de code suivant, qui tente de télécharger des fichiers depuis 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>

Cependant, lorsque vous tentez d'exécuter ce code à l'aide de goroutines, il échoue. En effet, la goroutine principale se termine avant que les goroutines responsables du téléchargement des fichiers n'aient terminé leurs tâches.

Pour résoudre ce problème et garantir que la goroutine principale attend la fin des goroutines avant de quitter, nous pouvons utiliser une synchronisation. WaitGroup, comme suit :

<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>

Ici, nous créons un sync.WaitGroup et l'utilisons pour suivre le nombre de goroutines qui n'ont pas encore terminé leurs tâches. Cela permet à la goroutine principale d'attendre que toutes les goroutines aient terminé leurs tâches avant de quitter.

Dans la fonction download_file modifiée, nous appelons wg.Done() pour signaler l'achèvement de la goroutine, en décrémentant le compteur wg.

En utilisant des goroutines et un groupe d'attente, nous pouvons télécharger efficacement plusieurs fichiers simultanément, améliorant ainsi l'efficacité globale du processus de téléchargement.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn