多线程与协程爬虫

前言

网络爬虫是一种高IO密集型任务,所以传统的进程或者多进程并不适合网络爬虫。虽然由于CPython中全局解释器锁GIL的存在,无法真正意义上的实现多线程,但这种“不完美的多线程”依然可以大大提高爬虫效率,当然在提高爬虫效率方面还有大家所熟知的协程。

多线程与协程的简单介绍

比较官方的介绍我就不说了,毕竟瞅了一眼一大串,这个快节奏的时代相信也没有多少人看到下去,哈哈。
简单的讲,如果把一个进程看成一个空间,那么多进程就是多个可以互相隔离的并行空间,而多线程则是在一个进程空间中开辟出多个并行的线程,这也就意味着多个线程间是共享资源的,因此多线程相比于多进程的数据安全性更低,这也是CPython引入GIL的原因。那么如何理解协程呢,事实上,多线程的本质是在一个进程的基础上实现高并发,而协程则是在一个线程的基础上实现高并发,协程的调度是通过代码来实现的,而不是CPU。(还是写了一大串哈)

一言不合上代码

下面以访问百度关于"爬虫"关键字为例,获取其前6页并解析相关信息。抓取时间已在代码中展出。

from gevent import monkey;monkey.patch_all() 
from lxml import etree
from concurrent.futures import ThreadPoolExecutor
import requests
import time
import gevent

def wrapper_statistics_time(func):
    """设置一个计算函数运行时间的装饰器"""
    def inner(*args, **kwargs
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值