登录
首页 >  Golang >  Go问答

爬虫中的Goroutine 如何并行抓取

来源:SegmentFault

时间:2023-01-08 11:28:01 375浏览 收藏

本篇文章给大家分享《爬虫中的Goroutine 如何并行抓取》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

在写一道爬虫的题目,题目要求是

要求支持多routine并行抓取(注意:这里并不是指简单设置GOMAXPROCS>1)

怎么样才是并行抓取?我现在只知道设置runtime.GOMAXPROCS=N

设置GOMAXPROCS是并行抓取吗,为什么?

不是很明白出题人的意思...

正确答案

设置GOMAXPROCS是并行抓取吗,为什么?

不是的, runtime.GOMAXPROCS设置的是 Golang 可利用的最大的操作系统的线程数. 即:

The GOMAXPROCS variable limits the number of operating system threads that can execute user-level Go code simultaneously.

我想你可能需要使用 goroutine, 即协程来实现并发的抓取, 下面是我写的一个简单的示例:

func main() {
    max_concurrent_count := 20

    wg := sync.WaitGroup{}
    wg.Add(max_concurrent_count)

    for i := 0; i 

在上面的例子中, 我使用了

go func() {
    ...
}

来启动了10个协程, 每个协程都是单独运行的, 它们互不干扰, 并发地完成 HTTP 的请求.

到这里,我们也就讲完了《爬虫中的Goroutine 如何并行抓取》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表