并发编程专栏系列博客
并发编程(一)python并发编程简介
并发编程(二)怎样选择多线程多进程和多协程
并发编程(三)Python编程慢的罪魁祸首。全局解释器锁GIL
并发编程(四)如何使用多线程,使用多线程对爬虫程序进行修改及比较
并发编程(五)python实现生产者消费者模式多线程爬虫
并发编程(六)线程安全问题以及lock解决方案
并发编程(七)好用的线程池ThreadPoolExecutor
并发编程(八)在web服务中使用线程池加速
并发编程(九)使用多进程multiprocessing加速程序运行
并发编程(十)在Flask服务中使用进程池加速
并发编程(十一)python异步IO实现并发编程
并发编程(十二)使用subprocess启动电脑任意程序(听歌、解压缩、自动下载等等)
文章目录
-
-
-
-
-
- 1. 为什么要引入并发编程
- 2. 有哪些程序提速的方法
- 3. python对并发编程的支持
1. 为什么要引入并发编程
- 场景一:网络爬虫、一个小时的任务并发20分钟完成。
- 场景二:APP应用,正常打开需要3秒,采用异步并发加载后提升到200毫秒
- 所以说,并发编程是为了提升程序运行的速度。
2. 有哪些程序提速的方法
- 多线程并发(threading)
- 多CPU并行(multiprocessing)
- 多机器并行(Hadoop、hive、spark)
3. python对并发编程的支持
- 多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不用等待 IO完成,而是借此机会执行其他task。
- 多进程:multiprocessing,利用多核CPU的能力,实现真正的并行执行任务
- 异步IO:asvncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
- 其他模块
- 使用lock对资源加锁,防止冲突访问。
- 使用Queue实现不同线程、进程之间的数据通信,实现生产者-消费者模式。
- 使用线程池pool、进程池pool,简化线程、进程的任务提交、等待结果、获取结果。
- 使用subprocess启动外部程序的进程,并进行输入输出交互