python并发编程实战(一):python并发编程简介
学习教程地址
这篇教程是:b站up主蚂蚁学Python的视频教程的笔记,原视频地址:【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行
为什么要引入并发编程
场景1:一个网络爬虫,按顺序爬取花了1个小时,采用并发下载减少到20分钟!
场景2:一个APP应用,优化前每次打开页面需要3s,采用异步并发提升到每次200毫秒;
- 引入并发,是为了提升程序运行的速度
- 学习并掌握并发编程,是高级别+高薪资程序员的必备能力
有哪些程序提速的方法
单线程串行:有一个线程,开始执行以后,CPU先执行,然后进行IO(数据读取和写入),在IO期间,CPU是不做什么事情的,IO完成后,CPU继续开始运算,然后进行下一次IO,整体的时间有些浪费,因为在IO期间,CPU是等待的状态
多线程并发:CPU开始执行,如果遇到IO,它会切换到另一个task进行执行,当IO完成之后,会通知CPU进行下一步的处理。电脑中的CPU和IO是可以同时并行进行的,IO的执行,比如读取内存、磁盘、网络,它的过程中是不需要CPU的参与的,这样CPU是可以释放出来,来执行其他task,实现并发的加速,但这种原理上,还是一个CPU进行运行的
多CPU并行:当前我们电脑都是多核CPU,所以很自然的,我们可以实现多个CPU多条线,同时真正的并行执行进行加速
多机器并行:当前进入大数据时代,很多程序的运行都是可以用很多机器并行来进行运算,每个机器上有很多CPU,每个CPU上也可以进行并发的执行
python对并发编程的支持
-
多线程:threading,利用CPU和IO同时执行的原理,让CPU不会干巴巴等待IO完成
-
多进程:multiprocessing,利用多核CPU的能力,真正的并行执行任务
-
异步IO:asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
-
使用Lock对资源加锁,防止冲突访问
-
使用Queue实现不同线程/进程之间的数据通信,实现生产者—消费者模式
-
使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果
-
使用subprocess启动外部程序的进程,并进行输入/输出交互