前言
本文将和大家一起探讨python的并发编程,涉及到python的并发编程模块,先简单介绍这些模块。后续文章,我们再进行详细使用。你至少应该分别掌握多进程、多线程、多协程的并发模块的一个,也可以分别掌握他们中的多个。模块就像法宝,掌握越多,运用起来就各种爽歪歪。
本文为python并发编程的第二篇,上一篇文章地址如下:
python:并发编程(一)_Lion King的博客-CSDN博客
下一篇文章地址如下:
(暂无)
一、python内置并发模块
python的并发模块有很多,其中一些比较优秀的模块,被python纳入内置模块。如果我是python,我愿称这些模块最强,要不我不会内置。当然,除了这些模块,还有很多模块值得我们学习,因为他们比内置模块更好用。
1、multiprocessing
multiprocessing
提供了进程相关的功能,包括进程的创建、启动、同步等操作。该模块可以实现真正的并行计算,每个进程都有自己独立的解释器和GIL,适用于CPU密集型任务。
在Python中,可以使用multiprocessing
模块提供的进程池(Pool
)来实现进程池编程。进程池可以方便地创建和管理多个子进程,从而实现并行执行任务的目的。
2、threading
threading
提供了线程相关的功能,包括线程的创建、启动、同步等操作。该
模块实现了基于线程的并发,但由于全局解释器锁(GIL)的存在,多线程并不能实现真正的并行执行,适用于I/O密集型任务。
threading没有线程池。
3、asyncio
asyncio
提供了基于协程的异步编程框架。该
模块使用事件循环和协程来实现非阻塞的异步操作,适用于高性能的I/O密集型任务。
在Python中,并没有协程池这种概念,但asyncio确实有池。
可以使用第三方库如asyncio
来实现协程和事件循环,从而实现高效的异步编程。asyncio
库提供了asyncio.Pool
类,它允许创建一个用于协程池的对象,用于协程的调度和执行。
4、concurrent.futures
concurrent.futures
提供了高级的并发编程接口,包括线程池和进程池。该
模块通过ThreadPoolExecutor
和ProcessPoolExecutor
类封装了线程和进程的管理,使并发编程更加简单和方便。
二、进程池和线程池的概念
当我们接触一些新概念的时候,每一篇文章都会做相应的补充,这样在理解上,容易达成一致。职位为什么不把这些汇总一起或者做成一个附录,是因为用到的时候来学习,更方便一下。不然,光是学习概念,就是一件漫长的事情,而且还不容易被理解。
1、进程池
进程池是一种并发编程的模式,它允许创建和管理一组预先初始化的进程,用于执行并行任务。进程池通常由一个主进程和多个工作进程组成。
主进程负责创建和管理进程池,以及分配任务给工作进程。工作进程则负责执行实际的任务,并将结果返回给主进程。通过使用进程池,可以减少重复创建和销毁进程的开销,并提高任务执行的效率。它具有如下特点:
(1)预先初始化:进程池在启动时会预先创建一定数量的工作进程,这些进程会一直保持运行状态,等待分配任务。
(2)任务分发:主进程将任务分发给工作进程,通常使用队列(如任务队列)来实现任务的调度和传递。
(3)并行执行:工作进程并行执行任务,每个进程独立运行,可以同时处理多个任务。
(4)进程复用:一旦工作进程完成了一个任务,它会返回到进程池中,准备接收下一个任务,而不是被销毁。
(5)进程管理:进程池负责管理工作进程的创建、销毁和资源分配,使得开发人员可以专注于任务的编写,而不必关注进程的细节。
2、线程池
进程池是一种并发编程的模式,概念与特点基本与进程池类似,我们应该学会举一反三。
三、内置并发模块的学习路线
1、
2、
3、