ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池

news/2025/9/22 16:26:00/文章来源:https://www.cnblogs.com/dengz/p/19105479

ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池

示例一: I/O 场景——10 个网页并发下载 + 实时进度

结果

多线程: 100%|██████████| 10/10 [00:07<00:00,  1.41it/s]
【多线程】I/O 并发总耗时:7.10s
多进程: 100%|██████████| 10/10 [00:06<00:00,  1.66it/s]
【多进程】I/O 并发总耗时:6.09s

示例代码

# -*- coding: utf-8 -*-
# ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池
import os
from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import ProcessPoolExecutor
import timeimport requests
from tqdm import tqdm# 核心 : concurrent.futures 标准库# 示例一 I/O 场景——10 个网页并发下载 + 实时进度urls = [f"https://httpbin.org/delay/2?i={i}" for i in range(10)]def fetch(url):response = requests.get(url)return url, len(response.text)def io_demo(func, desc=""):with func(max_workers=os.cpu_count()) as executor:futures = [executor.submit(fetch, u) for u in urls]for f in tqdm(futures, total=len(urls), desc=desc):url, size = f.result()# print(f"URL:{url} 长度:{size}")if __name__ == '__main__':start_time = time.time()io_demo(ThreadPoolExecutor, desc='多线程')print(f"【多线程】I/O 并发总耗时:{time.time() - start_time:.2f}s")start_time = time.time()io_demo(ProcessPoolExecutor, desc='多进程')print(f"【多进程】I/O 并发总耗时:{time.time() - start_time:.2f}s")

示例二: CPU 场景——12 核并行计算 π 的猛烈逼近

结果

【多线程】π ≈ 3.141650
【多线程】CPU 并发总耗时:2.18s
【多进程】π ≈ 3.141946
【多进程】CPU 并发总耗时:0.70s

示例代码

# -*- coding: utf-8 -*-
# ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池
import os
import random
from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import ProcessPoolExecutor
import timeimport requests
from tqdm import tqdm# 核心 : concurrent.futures 标准库# 示例二:CPU 场景。 12 核并行计算 π 的猛烈逼近# 蒙特卡洛法近似计算 π
def pi_partial(samples):inside = 0rnd = random.Random()for _ in range(samples):x = rnd.random()y = rnd.random()if x * x + y * y < 1:inside += 1return insidedef cpu_demo(func, desc=""):workers = os.cpu_count()  # 使用CPU核心数samples_per_worker = 5_000_000  # 每个核心计算5百万样本with func(max_workers=workers) as executor:futures = [executor.submit(pi_partial, samples_per_worker) for _ in range(workers)]inside_total = sum(f.result() for f in futures)# 等价于:4 * (总命中数) / (总样本数)pi_estimate = 4 * inside_total / (samples_per_worker * workers)return pi_estimateif __name__ == '__main__':start_time = time.time()thread_res = cpu_demo(ThreadPoolExecutor, desc='多线程')print(f"【多线程】π ≈ {thread_res:.6f}")print(f"【多线程】CPU 并发总耗时:{time.time() - start_time:.2f}s")start_time = time.time()process_res = cpu_demo(ProcessPoolExecutor, desc='多进程')print(f"【多进程】π ≈ {process_res:.6f}")print(f"【多进程】CPU 并发总耗时:{time.time() - start_time:.2f}s")

concurrent.futures 核心 API

方法 用途 细节要点
submit(fn, *args, **kwargs) 提交单任务,返回 Future 立即返回,不阻塞
map(fn, iterable, timeout=None, chunksize=1) 批量任务,结果按输入顺序返回 阻塞直到全部完成
as_completed(fs, timeout=None) 谁先完成先拿结果 适合进度条、实时反馈
wait(fs, return_when=...) 阻塞到全部/任一/首个任务完成 与 threading.Event 类似
Future.result() 获取任务结果 / 抛异常 可加 timeout
Future.cancel() 取消未开始的任务 已运行不会终止
上下文管理器 with Executor(...) as ex: 自动 shutdown(wait=True)

|记住:全部都围绕 Future 这一轻量对象。Future 包含 状态、结果、异常、取消接口,让主线程放心拿回信息。

参考

https://zhuanlan.zhihu.com/p/1923728223172265104

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析MS12-020关键漏洞CVE-2012-0002:远程桌面协议的安全风险与缓解方案

本文详细分析了微软远程桌面协议(RDP)中的高危漏洞CVE-2012-0002,该漏洞允许未经认证的远程代码执行,影响所有Windows版本。文章提供了启用网络级认证(NLA)的临时缓解方案,并讨论了终端服务网关和RemoteFX场景的风险…

模板网站可以自己买空间吗吗企业官网策划

2022年第十一届数学建模国际赛小美赛 D题 野生动物贸易是否应长期禁止 原题再现&#xff1a; 野生动物市场被怀疑是此次疫情和2002年SARS疫情的源头&#xff0c;食用野生肉类被认为是非洲埃博拉病毒的一个来源。在冠状病毒爆发后&#xff0c;中国最高立法机构永久性地加强了野…

课程网站建设方案提高seo排名

随着金九银十逐渐进入尾声&#xff0c;还在观望机会的朋友们已经开始焦躁&#xff1a;“为什么我投的简历还没有回音&#xff1f;要不要趁现在裸辞好好找工作&#xff1f;” “金九银十”作为人们常说的传统“升职加薪”的黄金季节&#xff0c;也是许多人跳槽的理想时机。然而…

电商网站规划论文快速搭建网站前端

UISlide 的不同效果展现&#xff1a;运行代码 本文转自懒得安分博客园博客&#xff0c;原文链接&#xff1a;XXXXXXXX&#xff0c;如需转载请自行联系原作者

高端定制网站开发设计建站流程登封市城乡建设路网站

1 简介 1.1 横向联邦学习 横向联邦学习也称为按样本划分的联邦学习&#xff0c;主要应用于各个参与方的数据集有相同的特征空间和不同的样本空间的场景&#xff0c;例如两个地区的城市商业银行可能在各自的地区拥有非常不同的客户群体&#xff0c;所以他们的客户交集非常小&a…

网站老域名跳转到新域名阿里巴巴招聘官网

上一讲主要介绍了看板方法以及如何使用看板方法来解决软件研发过程中出现的团队过载、工作不均、任务延期等问题。通过学习前面几个课时介绍的知识&#xff0c;你的团队开始源源不断地交付用户价值。用户对交付的功能非常满意&#xff0c;但等到系统上线后经常出现服务不可用的…

美食网站 原型 html 下载网站咨询弹窗是怎么做的

前言: 爬虫哪家强,当然是python 我是属于啥语言都用,都懂点,不精通,实际工作中能能够顶上就可以。去年写的抓取bing每日的壁纸&#xff0c;保存到本地&#xff0c;并上传到阿里云oss&#xff0c;如果只是本地壁纸切换&#xff0c;存下来就行&#xff0c;一直想做个壁纸站点&…

网站怎么做扫码微信支付接口代理网址怎么用

之前了解了&#xff1a; 创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点&#xff0c;但无法验证用户的身份。我们这次了解用户验证部分。通过用户验证&#xff0c;我们可以根据用户的身份&#xff0c;提供不同的服务。 …

宁阳移动网站制作免费做背景调查的网站

内核生命周期uboot 打印完 Starting kernel . . .&#xff0c;就完成了自己的使命&#xff0c;控制权便交给了 kernel 的第一条指令&#xff0c;也就是下面这个函数init/main.casmlinkage __visible void __init start_kernel(void){...rest_init();}start_kernel 相当于内核的…

鸿蒙项目实战(九):get请求参数的处理

get请求将键值对数据拼接到url后面,并且进行编码处理(编码空格(转为%20)和中文字符等非保留字符)static async get<T>(url: string, params?: HashMap<string,object>): Promise<T> {if (params…

20250806_信安一把梭_test

流量分析, 应急响应, Webshell, 信安一把梭Tags:流量分析, 应急响应, Webshell, 信安一把梭 0x00. 题目 流量包描述:可恶的黑客,在我的电脑上传了几个奇怪的文件,老师教了我排查但是我没学会,但是我认识大佬你,请…

专业 RAW 图像处理利器!DxO PhotoLab 让你的照片质感飙升

对于摄影爱好者、专业摄影师以及图像后期从业者而言,一款能精准挖掘 RAW 文件潜力、兼顾操作效率与专业功能的图像处理软件,是提升作品质感的核心工具。DxO PhotoLab 作为专业级 RAW 图像处理软件,凭借强大的智能校…

mysql时间转字符串,自定义格式将日期时间值转换为字符串

在 MySQL 中,将时间 / 日期类型转换为字符串可以使用 DATE_FORMAT() 函数,该函数允许你根据自定义格式将日期时间值转换为字符串。 基本语法 sql DATE_FORMAT(date, format) date:要转换的日期 / 时间字段或值(可以…

网站制作工作室制作平台国外网站后缀

指针常量 指针常量&#xff1a;顾名思义它就是一个常量&#xff0c;但是是指针修饰的。 格式为&#xff1a; int * const p //指针常量在这个例子下定义以下代码&#xff1a; int a&#xff0c;b&#xff1b; int * const p&a //指针常量 //那么分为一下两种操作 *p9;//操…

怎么做原创电影视频网站海口智能建站详情

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

苏州吴中长桥网站建设wordpress获取标签链接

目录 一、Nginx概述 1.1 负载均衡概述 1.2 负载均衡的作用 1.3 四/七层负载均衡 1.3.1 网络模型简介 1.3.2 四层和七层负载均衡对比 1.3.3 Nginx七层负载均衡实现 1.4 Nginx负载均衡配置 1.5 Nginx负载均衡状态 1.6 Nginx负载均衡策略 二、负载均衡实战 2.1 测试服…

茌平网站建设菜谱制作小公司企业简介300字

单例模式,是设计模式当中非常重要的一种,在面试中也常常被考察到。 正文如下: 一、什么时候使用单例模式? 单例模式可谓是23种设计模式中最简单、最常见的设计模式了,它可以保证一个类只有一个实例。我们平时网购时用的购物车,就是单例模式的一个例子。想一想,如果购物…

菏泽住房和城乡建设部网站常德论坛市民留言尚一网

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…

万州网站制作凡科建站怎样建站中站

&#xff08;1&#xff09;线程属性 Linux下线程的属性是可以根据实际项目需要&#xff0c;进行设置&#xff0c;之前我们讨论的线程都是采用线程的默认属性&#xff0c;默认属性已经可以解决绝大多数开发时遇到的问题。如我们对程序的性能提出更高的要求那么需要设置线程属性…