Python并发编程
作者:互联网
一、并发编程简介
1、并发编程的目的就是为了提升程序运行速度
2、程序提速的方法:单线程串行(不加改造的程序)-->多线程并发(threading)-->多进程并行(multiprocessing)-->多机器并行(hadoop/hive/spark)
3、Python对并发编程的支持
- 多线程:threading,利用CPU计算和IO读写可以同时执行的原理,让CPU不会干巴巴的等待IO完成,可以去做其他事
- 多进程:multiprocessing,利用多核CPU和IO的能力,真正的并行执行任务
- 异步IO(协程):asyncio,在单线程下利用CPU和IO可以同时执行的原理,实现函数异步执行
- 使用Lock对资源加锁,防止冲突访问
- 使用Queue实现不同线程/进程之间的数据通信,实现生产者-消费者模式
- 使用线程池Pool、进程池Pool,简化线程、进程的任务提交、等待结束、获取结果
- 使用subprocess启动外部程序,并进行输入输出交互
二、多线程Thread、多进程Process、多协程Coroutine概述
1、什么是CPU密集型计算、IO密集型计算?
- CPU密集型:也叫计算密集型,是指IO在很短时间就可以完成,CPU需要大量的计算和处理,特点是CPU占用相当高,如压缩和解压、加密和解密、正则表达式搜索
- IO密集型:是指程序执行大部分时间是CPU在等待IO(硬盘、内存)的读写操作,CPU占用率较低,如文件处理程序、网爬虫资源下载、读写数据库程序
2、多线程、多进程、多协程的对比?
一个进程中可以启动N个线程、一个线程可以启动N个协程(异步IO)
- 多进程multiprocessing.Process
- 优点:可以利用多核CPU并行运算
- 缺点:占用资源最多、受CPU限制可以启动数目比线程少
- 适用于:CPU密集型计算
- 多线程threading.Thread
- 优点:相比进程,更轻量级、占用资源更少
- 缺点:
- 相比进程:多线程只能并发执行,不能利用多核CPU(GIL)
- 相比协程:启动数目有限制,占用内存资源,有线程切换开销
- 适用于:IO密集型计算、同时运行的任务数目要求不多
- 多协程asyncio.Coroutine
- 优点:内存开销最少、启动协程数量最多
- 缺点:支持的库有限制(例如不能使用requests库,只能使用特定的aiohttp库)、代码实现复杂
- 场景:IO密集型计算、需要超多任务运行、但有现成的库支持的场景
3、怎样根据任务选择对应技术?
标签:Python,编程,并发,线程,IO,进程,密集型,多线程,CPU 来源: https://www.cnblogs.com/lennie-luo/p/15183008.html