文章目录一、关于线程池\进程池介绍1.1 池的概念1.2 池的划分1.3 线程池和进程池的区别1.5 进程池的创建(流程)二、创建线程池\进程池的两种方法2.1 concurrent和multiprocessing区别三、concurrent.futures模块3.1 模块的介绍3.2 Executor.submit 创建进程/线程池四、concurrent.futures 常用模块4.1 Executor模块4.2 Future模块4.3 模块其他实用函数五、程序实例5.1 进程池实例5.2 线程池实例5.3 同步和异步的实例 一、关于线程池\进程池介绍 1.1 池的概念 池是一组资源的集合 【Python内功修炼011】:Python进程池和线程池详解 在Python编程中,进程池和线程池是实现并发处理的关键工具。它们允许我们高效地管理和执行大量并发任务,尤其对于处理IO密集型和计算密集型任务,能够充分利用多核处理器的优势。 一、关于线程池和进程池介绍 1.1 池的概念 线程池和进程池都是资源管理的策略,它们预先创建一组可复用的线程或进程,当需要执行任务时,可以从池中获取资源,任务完成后归还给池,而非每次创建新的线程或进程。这种方式降低了创建和销毁线程或进程的开销,提高了程序运行效率。 1.2 池的划分 资源池可以按照不同种类划分,例如内存池、线程池、进程池和连接池。每个池都有其特定的用途,例如内存池用于管理内存分配,而线程池和进程池则用于并行执行任务。 1.3 线程池和进程池的区别 线程池主要用于IO密集型任务,如文件读写、网络通信等,因为线程间的切换开销较小。而进程池则适用于计算密集型任务,尤其是需要大量CPU运算的情况,因为它可以利用多核处理器的并行计算能力。 1.5 进程池的创建(流程) 创建进程池通常包括以下步骤: 1. 初始化进程池,设置合适的进程数量。 2. 将任务添加到进程池的等待队列中。 3. 进程池中的进程会逐个处理队列中的任务。 4. 所有任务执行完毕后,关闭进程池,释放资源。 二、创建线程池和进程池的两种方法 Python提供了`concurrent.futures`和`multiprocessing`两个模块来实现线程池和进程池。`concurrent.futures`是Python 3.2引入的,旨在简化异步编程,它的`ThreadPoolExecutor`和`ProcessPoolExecutor`类分别用于创建线程池和进程池。相比`multiprocessing`,`concurrent.futures`的API更简洁,易于理解和使用。 三、`concurrent.futures`模块 3.1 模块介绍 `concurrent.futures`提供了一个高层的接口,允许开发者轻松地启动和管理并发任务。它基于`Executor`抽象类,有`ThreadPoolExecutor`(线程池)和`ProcessPoolExecutor`(进程池)两个实现。 3.2 `Executor.submit`创建进程/线程池 `Executor.submit()`方法用于提交任务到线程池或进程池,返回一个`Future`对象。`Future`对象代表了未来的任务结果,可以在任务完成后获取。使用`max_workers`参数指定最大并发任务数。但需要注意,一旦任务开始执行,就会占用一个worker,直至任务结束,可能导致其他任务等待。 简易创建进程池示例: ```python from concurrent.futures import ProcessPoolExecutor import time, os def print_info(n): print(f"{os.getpid()}: 开启{n}") with ProcessPoolExecutor(max_workers=2) as executor: for i in range(5): future = executor.submit(print_info, i) ``` 四、`concurrent.futures`常用模块 4.1 `Executor`模块 `Executor`是基础抽象类,提供了一种创建线程池或进程池的通用方式。 4.2 `Future`模块 `Future`对象代表异步操作的结果。可以检查任务状态,等待结果,甚至取消任务。 4.3 模块其他实用函数 `concurrent.futures`还提供了如`wait()`和`as_completed()`等方法,用于管理并发任务的执行状态和结果。 五、程序实例 5.1 进程池实例 创建进程池执行计算任务,例如: ```python from concurrent.futures import ProcessPoolExecutor def square(n): return n ** 2 numbers = [1, 2, 3, 4] with ProcessPoolExecutor() as executor: results = executor.map(square, numbers) print(list(results)) # 输出: [1, 4, 9, 16] ``` 5.2 线程池实例 使用线程池处理IO密集型任务,如下载网页: ```python from concurrent.futures import ThreadPoolExecutor import requests urls = ["http://example.com"] * 5 def fetch(url): response = requests.get(url) return response.text with ThreadPoolExecutor() as executor: futures = {executor.submit(fetch, url) for url in urls} for future in futures: print(future.result()) ``` 5.3 同步和异步的实例 同步执行意味着任务按顺序逐一完成,而异步执行允许并发执行任务。`concurrent.futures`可以通过`Future`对象的`result()`方法实现同步等待,或者通过`asyncio`库实现异步编程。 通过深入理解Python的线程池和进程池,开发者能够更好地优化程序性能,特别是在处理大量并发任务时。合理使用线程池和进程池,可以显著提高程序执行效率,减少资源浪费,提升用户体验。
- 粉丝: 3
- 资源: 900
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 西电微机原理实验-西安电子科技大学微机原理课程实验概述与指导
- 智慧校园(校园AI 产品) 校园安全 智慧校园 教育数字化 AI校园
- 西电微机原理实验四:8255可编程并行接口的应用
- 基于 Go+Echo 开发的多房间实时通讯系统。详细文档+优秀项目+全部资料.zip
- 基于 Go + Vue 的现代化博客系统详细文档+优秀项目+全部资料.zip
- 基于 go + grpc + consul 的微服务系统详细文档+优秀项目+全部资料.zip
- 基于 golang goframe + vue3 的、前后端分离的后台管理系统快捷使用模板,支持按钮级别的 RBAC。详细文档+优秀项目+全部资料.zip
- 基于 goframe2 和vue3 开发的全栈前后端分离的后台管理系统,详细文档+优秀项目+全部资料.zip
- 基于 Golang 的 容器管理系统 API详细文档+优秀项目+全部资料.zip
- 基于 React 实现的电商后台管理系统的前端项目详细文档+优秀项目+全部资料.zip
- 基于 Golang开发的微服务网关,能够实现高性能 HTTP API 转发、服务编排、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展详细文档+优秀项目+全部资料.zip
- 基于 Vue + Go 实现客户关系管理系统,,主要功能有仪表盘、客户管理、合同管理、产品管理、配置、订阅等功能详细文档+优秀项目+全部资料.zip
- 基于beego v2.0.1框架和AdminLte前端框架,开发的go语言通用后台系统,详细文档+优秀项目+全部资料.zip
- 基于 SpringBoot + Spring + SpringMvc + Mybatis + Shiro+ Redis 开发单点登录管理系统详细文档+优秀项目+全部资料.zip
- 基于beego的简易blog系统详细文档+优秀项目+全部资料.zip
- 基于Beego开发的可切换模板的 BBS 社交博客系统、它安装简单便捷,页面简介优美。前端是HTML+JS+CSS,不需要掌握一些前端技术栈也能轻松自定义页面。详细文档+优秀项目+全部资料.zip
评论5