Python-并发下载-gevent库

一、协程实现并发爬取

协程,就是同时开启多个任务,但一次只顺序执行一个。等到所执行的任务遭到阻塞,就切换到下一个任务继续执行,从而节省阻塞所占用的时间。

  • 单进程下协程和多线程并没有很大区别,相比之下,协程更节省资源、效率更高,并且更安全。
  • 而多进程下,多线程可以利用多核资源,这是单进程的协程模型做不到的。

二、协程爬虫的流程分析

由于协程的切换不像多线程调度那样耗费资源,所以不用严格限制协程的数量。

① 将要爬取的网址存储在一个列表中,由于针对每个网址都要创建一个协程,所以需要准备一个待爬取网址列表。

② 为每个网址创建一个协程并启动该协程。协程会依次执行,爬取对应的网页内容。如果一个协程在执行过程中出现网络阻塞或其它异常情况,则马上执行下一个协程。由于协程的切换不用切换线程上下文,消耗比较小,所以不用严格限制协程的数量。每个协程负责爬取网页,并将网页中的目标数据解析出来。

③ 将爬取到的目标数据存储在一个列表中。、

④ 遍历数据列表,将数据存储在本地文件中。

三、第三方库 gevent

gevent 是一个基于协程的 Python 网络库。

# 安装:
pip install gevent

引用

import gevent

① gevent 库的常用方法

  • gevent.spawn()

创建并启动协程

  • gevent.joinall()

等待所有协程执行完毕

原文发布于微信公众号 - 数据云团(SmartData)

原文发表时间:2019-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券