Maison > Article > développement back-end > Comment utiliser la fonction de concurrence en langage Go pour explorer plusieurs sites Web en parallèle ?
Comment utiliser la fonction concurrente du langage Go pour réaliser une exploration parallèle de plusieurs sites Web ?
Introduction :
Dans le développement de robots d'exploration Web, nous avons souvent besoin d'obtenir des données de plusieurs sites Web. L'exploration en série de plusieurs sites Web est non seulement inefficace, mais ne parvient pas non plus à utiliser pleinement les fonctionnalités multicœurs de l'ordinateur. Par conséquent, nous pouvons utiliser des fonctions concurrentes pour implémenter l’exploration parallèle de plusieurs sites Web en langage Go afin d’améliorer l’efficacité de l’exploration. Cet article expliquera comment utiliser des fonctions concurrentes pour implémenter l'exploration parallèle de plusieurs sites Web en langage Go et fournira des exemples de code correspondants.
1. Introduction aux fonctions simultanées
Les fonctions simultanées peuvent allouer des tâches à plusieurs goroutines pour une exécution parallèle, améliorant ainsi l'efficacité d'exécution du programme. Dans le langage Go, les fonctions concurrentes utilisent généralement le mot-clé go pour démarrer une nouvelle goroutine. Voici un exemple simple :
func main() { go fmt.Println("Hello, world!") fmt.Println("Main function finished!") }
Dans l'exemple ci-dessus, le mot-clé go est devant, ce qui signifie démarrer une nouvelle goroutine pour exécuter l'instruction de sortie fmt.Println("Hello, world!"). La fonction principale continue de s'exécuter vers le bas et affiche "Fonction principale terminée !". Étant donné que la nouvelle goroutine et la goroutine principale s'exécutent simultanément, "Hello, world!" peut être affiché avant que la goroutine principale ne termine son exécution.
2. Implémenter l'exploration parallèle de plusieurs sites Web
Ce qui suit est un exemple de code qui utilise des fonctions simultanées pour implémenter l'exploration parallèle de plusieurs sites Web :
package main import ( "fmt" "io/ioutil" "net/http" "sync" ) func main() { // 创建一个等待组 var wg sync.WaitGroup // 定义要抓取的网站列表 urls := []string{ "https://www.google.com", "https://www.baidu.com", "https://www.microsoft.com", "https://www.apple.com", } // 遍历网站列表,为每个网站启动一个goroutine来进行抓取 for _, url := range urls { wg.Add(1) // 增加等待组的计数器 go func(url string) { defer wg.Done() // 减少等待组的计数器 resp, err := http.Get(url) if err != nil { fmt.Printf("Failed to fetch %s: %s ", url, err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Printf("Failed to read response body of %s: %s ", url, err) return } // TODO: 处理网站的抓取结果 fmt.Printf("Fetched %s: %d bytes ", url, len(body)) }(url) } // 等待所有的goroutine执行完毕 wg.Wait() fmt.Println("All sites have been fetched!") }
Dans l'exemple de code ci-dessus, nous créons d'abord une synchronisation de groupe en attente. attendez que toutes les goroutines terminent leur exécution. Ensuite, nous avons défini une tranche d'URL contenant plusieurs URL de sites Web. Ensuite, nous avons lancé une nouvelle goroutine pour chaque site Web en utilisant des fonctions concurrentes et des fonctions anonymes. Dans la fonction anonyme, nous utilisons la méthode http.Get pour obtenir le contenu du site Web et traiter les résultats renvoyés.
Enfin, nous appelons la méthode wg.Wait() et attendons que toutes les goroutines terminent leur exécution. Lorsque tous les sites ont été récupérés, le programme affichera « Tous les sites ont été récupérés ! ».
3. Résumé
L'utilisation de fonctions simultanées peut simplifier le processus d'exploration de plusieurs sites Web en parallèle et améliorer considérablement l'efficacité de l'exploration. En utilisant un groupe d'attente pour attendre la fin de toutes les goroutines, nous pouvons garantir que tous les sites Web sont explorés avant un traitement ultérieur. J'espère que cet article vous aidera à comprendre l'utilisation des fonctions concurrentes en langage Go !
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!