Python中的并发编程

完善更新中......

一,并发编程简介

1.1 为什么要引入并发编程

场景1:一个网络爬虫,按顺序爬取花了一小时,采用并发下载减少到20分钟

场景2:一个App应用,优化前每次打开页面需要3秒,采用异步并发提升到每次200ms

引入并发就是为了提升程序运行速度

1.2 有那些编程提速的方法

1.3 Python对并发编程的支持

  • 多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴的等待IO完成
  • 多进程:multiprocessing,利用多核CPU的能力,真正的并行执行任务
  • 异步IO:asynico,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
  • 锁:使用Lock锁对资源加锁,防止冲突访问
  • 数据通信:使用Queue实现不同线程,进程之间的数据通信,实现生产者,消费者模式
  • Pool:使用线程池Pool/进程池Pool,简化线程/进程的任务提交,等待结束,获取结果等

二, python并发编程的选择

python的并发编程有三种,多线程Thread,多进程Process,多协程Coroutine

2.1 什么是CPU密集型计算,IO密集型计算

CPU密集型:也叫计算密集型,是指I/O在很短时间内就可以完成,CPU需要大量的计算和处理,特点是CPU占用率相当高,例如:解压缩/加密解密/正则表达式搜索

IO密集型:系统运作过程中大部分的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率很低.例如:文件处理程序,网络爬虫程序,读写数据库程序

2.2 多线程,多进程,多协程之间的对比

一个进程包含多个线程,一个线程包含多个进程

多进程Process(multiprocessing):

优点:可以利用多核CPU并行运算

缺点:占用资源最多,可启动数目比线程少

适用于:CPU密集型计算

多线程Thread(threading):

优点:相比进程更轻量级,占用资源少

缺点:

相比进程:多线程只能并发执行,不能利用多CPU(GIL)

相比协程:启动数目有限制,占用内存资源,有线程切换开销

适用于:IO密集型计算,同时运行的任务数目要求不多

多协程Coroutine(asyncio)

优点:内存开销最少,启动协程数量最多

缺点:支持的库有限(aiohttp VS requests)代码实现复杂

相关推荐
heartbeat..2 小时前
Spring AOP 全面详解(通俗易懂 + 核心知识点 + 完整案例)
java·数据库·spring·aop
麦聪聊数据4 小时前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦5 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
YMatrix 官方技术社区6 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录7 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong7 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
欧亚学术8 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
黑白极客8 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎
大厂技术总监下海9 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
LeenixP9 小时前
RK3576-Debian12删除userdata分区
linux·运维·服务器·数据库·debian·开发板