Python 爬虫提速:【多进程、多线程、协程+异步】对比测试

本文对比测试了Python爬虫中的单进程单线程、多进程并行、多线程并发以及协程加异步的方式。结果显示,多进程和协程异步能显著提升执行效率,特别是协程异步,能将耗时从3n秒降低到3秒。然而,多进程受限于环境,实际耗时可能无法完全体现其优势。测试环境使用Flask模拟了一个慢速服务器进行实验。
摘要由CSDN通过智能技术生成

概念介绍

首先简单介绍几个概念:

  • 进程和线程
    • 进程就是一个程序在一个数据集上的一次动态执行过程(数据集是程序在执行过程中所需要使用的资源)。
    • 线程也叫轻量级进程,它是一个基本的 CPU 执行单元,是比进程更小的能独立运行的基本单位。
    • 进程和线程的关系
      • 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
      • 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
      • CPU 分给线程,即真正在 CPU 上运行的是线程。
  • 并行和并发
    • 并行处理是计算机系统中能同时执行两个或更多个处理的一种计算方法。并行处理可同时工作于同一程序的不同方面,其主要目的是节省大型和复杂问题的解决时间。
    • 并发处理指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个 CPU 上运行,但任一个时刻点上只有一个程序在 CPU 上运行。
    • 并发的关键是你有处理多个任务的能力,不一定要同时。并行的关键是你有同时处理多个任务的能力。所以说,并行是并发的子集多进程是并行的,多线程是并发的
  • 同步和异步
    • 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。
    • 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
    • 举个例子,打电话时就是同步通信,发短息时就是异步通信。

测试环境

进行对比测试之前,我们先来创建一个合适的实验环境:
       模拟一个需要等待一定时间才可以获取返回结果的网页。
如果直接用百度、CSDN 等站点的话,一方面响应太快、难以看出各种方法的差距,另一方面响应速度会受网速影响、每次发送请求获取响应所需的时间不完全一致导致重复实验结果差距较大,所以在此用 Flask 模拟一个本地慢速服务器。
flask_server.py 代码如下:

from flask import Flask     # pip install flask
import time

app = Flask(__name__)

@app.route('/')
def index():
    time.sleep(3)    		# 休眠 3 秒再返回结果
    return 'Hello!'

if __name__ == '__main__':
    app.run(threaded=True)  # 以多线程模式启动服务

启动之后,Flask 服务默认在 127.0.0.1:5000 上运行,控制台输出结果如下:

 * Serving Flask app "flask_server" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值