python并发编程实战

python对并发编程的支持

  • 多线程:threading,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴的等待
  • 多进程:multiprocessing,利用多核CPU的能力,真正的并行任务
  • 一步IO:asyncio,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
  • 使用Lock对共享资源加锁,防止冲突访问。
  • 使用Queue实现不同线程、进程之间的数据通信,实现生产者、消费者模式
  • 使用线程池ThreadPoolExecutor、进程池ProcessPoolExecutor ,简化线程、进程的任务交互,等待结束,获取结果
  • 使用subprocess启动外部程序的进程,并进行输入输出交互

python并发编程的三种方式

多线程Thread    (threading)

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

缺点:

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

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

多进程Process    (multiprocessing)

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

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

适用于:IO密集型计算、需要超多任务运行、但是有现成库支持的场景

多协程Coroutine  (asyncio) 

优点:内存开销最少,启动协程数量最多
缺点:支持的库有限制,(aiohttp vs requests),代码实现复杂

三者之间的关系:一个进程可以启动多个线程,一个线程可以启动多个协程

 

1. 什么是CPU密集型计算、IO密集型计算?

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

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

2. 多线程、多进程、多协程的对比

3. 怎样根据任务选择对应技术

 

 

 

 

异步IO库

 

posted @ 2023-05-23 11:38  羊脂玉净瓶  阅读(32)  评论(0)    收藏  举报