Python爬虫-速度(2)

本文介绍了Python爬虫速度优化的相关概念,包括并发与并行的区别,同步与异步、阻塞与非阻塞的解释,以及多进程、多线程和协程在爬虫中的应用。通过实际例子展示了不同方法对爬虫速度的影响,指出多进程和多线程可以提高程序速度,而协程在适当调整下能够处理大量任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python爬虫-速度(2)


018.9.17

Python爬虫-速度(1)
Python爬虫-速度(3)

前言

我原有个习惯,就是每写个什么东西,都会在开头记下日期。今天得空复查这篇内容的时候,发现居然赫然显示着:018.9.17

十天就这么过去了。

很难说我这10天里到底做了什么,收获了什么。因为我确实未发现自己在这时间里有如何的长进。倒是再一次加深了对时间飞速的体会。

继而说说这次的内容吧。由于进程线程协程涉及到的知识点很多,如果细讲起来,够写好几篇了。所以只好提供自己学习时用到的资料,包括书籍《Python Cook》,以及一些博客文章。为了方便你我他,是全部附上了链接的。

并发与并行

我们先来说说什么是并发,什么又是并行。

并发:指程序有处理多个任务的能力
并行:指程序有同时处理多个任务的能力

二者之间的差别,就在同时二字。可以举个例子:并发就是一群人从一个独木桥上过,而并行则是一群人从多个独木桥上过。
在这里插入图片描述
在这里插入图片描述

其实网上我看到许多人爱用“一个人吃十个馒头与十个人吃十个馒头”的例子,倒是很好的解释了并发与并行的区别,然而乍一看,似乎并发没啥用呀!所以庆幸自己想出一个过独木桥的例子【不要脸.jpg】,这样一来不但给了二者区别,还可以体现出并发的提速作用:一群人过独木桥(所有人人可以都在桥上)肯定是比这群人挨个挨个的过独木桥(桥上最多允许一个人存在)要快许多。

异步与同步/阻塞和非阻塞

可以用一个在知乎看到的段子来理解:

老张爱喝茶,废话不说,煮开水。
出场人物:老张。
道具:水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。

(1) 老张把水壶放到火上,立等水开。(同步阻塞)
【老张觉得自己有点傻】
(2) 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
【老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。】

(3) 老张把响水壶放到火上,立等水开。(异步阻塞)
【老张觉得这样傻等意义不大。】
(4) 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
【老张觉得自己聪明了。】

所谓同步异步,只是对于水壶而言。
普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。
立等的老张,阻塞;看电视的老张,非阻塞。情况(1)和情况(3)中老张就是阻塞的,媳妇喊他都不知道。虽然(3)中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

——来源网络,作者不明。

作者:愚抄
链接:https://www.zhihu.com/question/19732473/answer/23434554
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

多进程

由于主要是为爬虫程序提速,所以过多的原理暂不讲的。但需要记得的是:多进程是并行的

我们可以通过实例来观察,首先来一个单进程单线程的爬虫程序:

import requests
import time

def get_one_html(url):
    response = requests.get(url=url, headers=HEADERS)
    return response.url

if __name__  == "__main__":
    HEADERS = {
   
   "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) "
                             "AppleWebKit/537.36 (KHTML, like Gecko) "
                             "Chrome/65.0.3325.183 Safari/537.36 "
                             "Vivaldi/1.96.1147.64"}

    urls = [
        "http://www.baidu.com", "http://www.sina.com.cn",
        "http://www.163.com"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值