python:并发编程(二)

 前言

本文将和大家一起探讨python的并发编程,涉及到python的并发编程模块,先简单介绍这些模块。后续文章,我们再进行详细使用。你至少应该分别掌握多进程、多线程、多协程的并发模块的一个,也可以分别掌握他们中的多个。模块就像法宝,掌握越多,运用起来就各种爽歪歪。

本文为python并发编程的第二篇,上一篇文章地址如下:

python:并发编程(一)_Lion King的博客-CSDN博客

下一篇文章地址如下:

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提供了高级的并发编程接口,包括线程池和进程池。模块通过ThreadPoolExecutorProcessPoolExecutor类封装了线程和进程的管理,使并发编程更加简单和方便。

二、进程池和线程池的概念

当我们接触一些新概念的时候,每一篇文章都会做相应的补充,这样在理解上,容易达成一致。职位为什么不把这些汇总一起或者做成一个附录,是因为用到的时候来学习,更方便一下。不然,光是学习概念,就是一件漫长的事情,而且还不容易被理解。

1、进程池

进程池是一种并发编程的模式,它允许创建和管理一组预先初始化的进程,用于执行并行任务。进程池通常由一个主进程和多个工作进程组成。

主进程负责创建和管理进程池,以及分配任务给工作进程。工作进程则负责执行实际的任务,并将结果返回给主进程。通过使用进程池,可以减少重复创建和销毁进程的开销,并提高任务执行的效率。它具有如下特点:

(1)预先初始化:进程池在启动时会预先创建一定数量的工作进程,这些进程会一直保持运行状态,等待分配任务。

(2)任务分发:主进程将任务分发给工作进程,通常使用队列(如任务队列)来实现任务的调度和传递。

(3)并行执行:工作进程并行执行任务,每个进程独立运行,可以同时处理多个任务。

(4)进程复用:一旦工作进程完成了一个任务,它会返回到进程池中,准备接收下一个任务,而不是被销毁。

(5)进程管理:进程池负责管理工作进程的创建、销毁和资源分配,使得开发人员可以专注于任务的编写,而不必关注进程的细节。

2、线程池

进程池是一种并发编程的模式,概念与特点基本与进程池类似,我们应该学会举一反三。

三、并发模块的学习方式

我们应该学习这些模块呢?这里提供一些方式供大家选择,而后续的文章,也会基于这些方式给大家一起分享。达成这种共识之后,相信学习将事半功倍。

1、官方文档和教程

阅读官方文档和教程是学习这些模块的最佳途径。Python 官方文档对这些模块提供了详细的说明、用例和示例代码。你可以先浏览官方文档,了解模块的功能和用法。

2、示例代码和案例

寻找一些示例代码和案例来加深理解。通过阅读和运行这些示例代码,你可以更好地理解模块的用法和特性,并学会如何解决实际问题。

3、项目实践与调试

选择一个小型的实践项目,例如编写一个多线程的网络爬虫、一个使用多进程的数据处理任务或一个使用异步编程的 Web 服务器。通过实际项目的开发,你可以更深入地理解这些模块的使用方式和注意事项,并体验到并发编程的好处和挑战。

猜你喜欢

转载自blog.csdn.net/weixin_43431593/article/details/131204941