系列索引:菜菜的并发编程笔记 | Python并发编程详解(持续更新~)
一、思维导图🕵️♀️
二、为什么要引入并发编程?
场景1:一个网络爬虫,按顺序爬取花了1小时,采用并发下载减少到20分钟!
场景2:一个APP应用,优化前每次打开页面需要3秒,采用异步并发提升到每次200毫秒;
正确答案:
-
引入并发,就是为了提升程序运行速度
-
学习并掌握并发编程,是高级别+高薪资程序员的必备能力
三、常见的程序提速方法
-
单线程串行:典型的无任何并发的编程,也是大多数人入门的编程方式
-
多线程并发:我们的计算机支持CPU和IO同时工作,因此可以在遇到IO操作时进行线程的切换,去执行其他线程,使用threading模块
-
多CPU并行(多进程):多进程就是可以使用多个CPU进行工作,受制于Python的GIL我们在多线程中只能使用一块CPU,多进程解决了这个问题,但要注意多进程的各个进程环境是独立的,主要使用multiprocessing模块
-
多机器并行:利用大数据技术实现分布式计算
四、Python对并发编程的支持
多线程
:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴等待IO完成
多进程
:multiprocessing,利用多核CPU的能力,真正的并行执行任务
异步IO
:asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
使用Lock对资源加锁,防止冲突访问
使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式
使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果
使用subprocess启动外部程序的进程,并进行输入输出交互
五、怎么选择多线程、多进程、多协程?
Python并发编程有三种方式:多线程Thread、多进程Process、多协程Coroutine
我们要根据项目的需求灵活选择不同的并发方式,并发方式选择不当会适得其反!!!
(1)什么是CPU密集型计算、IO密集型计算?
(2)多线程、多进程、多协程的对比
(3)怎样根据任务选择对应技术?
针对不同的项目主要看是CPU密集型还是IO密集型,对于IO密集型的我们还需要具体分析看是否满足上述三个条件,协程是比较新的技术,使用起来可能会受到阻碍但效果也可能会更好。
六、线程池和进程池
原理:提前创建好线程/进程放在池子里,新的task到来可以重用这些资源,减少了新建、终止线程/进程的开销
- 池化的好处
- 提升性能:因为减去了大量新建、终止线程的开销,重用了线程资源
- 适用场景:适合处理突发性大量请求或需要大量线程完成任务、但实际任务处理时间较短
- 防御功能:能有效避免系统因为创建线程过多,而导致系统负荷过大响应变慢等问题
- 代码简洁:使用线程池的语法比自己新建线程执行线程更加简洁
Python进阶之并发编程篇持续更新,欢迎
点赞收藏
+关注
上一篇:菜菜的并发编程笔记 | Python并发编程详解(持续更新~)
下一篇: 菜菜的并发编程笔记 |(二)全局解释器锁GIL
本人水平有限,文章中不足之处欢迎下方👇评论区批评指正~如果感觉对你有帮助,点个赞👍 支持一下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 🤝 我的博客 ,期待在这与你相遇 ~