python加速方法:纯CPU多进程加速(joblib库)

我写C++ 代码喜欢用OpenMP进行加速,在不更改源代码情况下只做稍稍修改即可实现CPU利用率最大化,跨平台移植也没有问题。
python是个好东西,苦恼于密级计算的时候只能使用单核,使用多线程不奏效,因为毕竟它受限于语言本身,于是搜索过程中看见了下图,一声苦笑
在这里插入图片描述

对于一核有难,七核围观的尴尬情况有效解决方案,多进程。python多进程有多种方式,例如:multiprocessing、joblib
等等joblib什么鬼,为啥它能实现多进程,请参考查阅这篇文章
在这里插入图片描述
通过上面可以看出joblib的确是多进程技术
下面测试代码中分别对普通计算、joblib加速计算、multiprocessing加速计算进行计时及结果统计


import time
from joblib import Parallel, delayed
import multiprocessing#多进程加速def square(num):time.sleep(1)  # 模拟耗时的计算操作return num ** 2def JobLibDemo(numbers):#利用JobLib并行加速results = Parallel(n_jobs=-1)(delayed(square)(num) for num in numbers)return resultsdef NormalComput(numbers):#普通计算results = []for num in numbers:results.append(square(num))return resultsdef MulProcessDemo(numbers):pool = multiprocessing.Pool()results = pool.map(square, numbers)pool.close()pool.join()return resultsif __name__ == '__main__':numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]start_time = time.time()resultsN = NormalComput(numbers)#普通for循环计算end_time1 = time.time()# results = Parallel(n_jobs=-1)(delayed(square)(num) for num in numbers)results = JobLibDemo(numbers)# 并行计算每个数字的平方end_time2 = time.time()resultsM = MulProcessDemo(numbers)#多进程计算结果end_time3 = time.time()# 打印计算结果print(resultsN)print(results)print(resultsM)print("普通处理时间:", end_time1 - start_time)print("JobLib并行处理时间:", end_time2 - end_time1)print("MulProcess并行处理时间:", end_time3 - end_time2)

运行结果
在这里插入图片描述
通过上面可以看出,jobLib的耗时最短,其代码写法及类似于C++ 的OpenMP加速方法

按此方法进行了两个函数加速,查看CPU使用效率图,如下图,结果是不是相当哇塞
在这里插入图片描述

上面列了不少好处,但是jobLib多进程运行效率相当高,但是不好调试,所以写的时候要搞清楚其并行原理,写好正常执行代码,最后改装成joblib即可

参考链接
Python并行计算库Joblib的技术原理解析

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

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

相关文章

Javascript_根据截止日期超时自动返回

例如定时交卷功能&#xff0c;隐藏一个input id"endTime"存放超时时间&#xff0c;例如2023-12-01 20:56:15&#xff0c;使用如下代码即可实现超时自动处理。 <script src"/jquery.min.js"></script><script type"text/javascript&qu…

【Go】Go语言基础内容

变量声明&#xff1a; 变量声明&#xff1a;在Go中&#xff0c;变量必须先声明然后再使用。声明变量使用 var 关键字&#xff0c;后面跟着变量名和类型&#xff0c;如下所示&#xff1a; var age int这行代码声明了一个名为 age 的整数变量。 变量初始化&#xff1a;您可以在声…

二叉树遍历 LeetCode 1038. 从二叉搜索树到更大和树

1038. 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST)&#xff0c;请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 从图中可以看出&#xff0c;每个节点是BST右中左遍历时&#xff0c;遍历到的节点的值加上之前所有节点的值。 在遍历时可以使…

全球与中国木质颗粒燃料市场:增长趋势、竞争格局与前景展望

木质颗粒汽油的主要优点之一是环境永续性。木质颗粒被认为是碳中立的&#xff0c;因为燃烧过程中释放的二氧化碳量大约等于木材生长过程中吸收的二氧化碳量。这种封闭的碳循环减少了温室气体净排放并减轻了气候变迁的影响。作为一种可再生资源&#xff0c;木屑颗粒还可以透过促…

Python必备神器揭秘:15个最热门库全解析

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python生态系统中拥有大量优秀的库&#xff0c;为开发者提供了广泛且强大的工具。本文将介绍15个最受欢迎的Python库&#xff0c;包括它们的功能、优点以及示例代码&#xff0c;帮助读者更全面地了解和使用这些库…

spring boot mybatis TypeHandler 源码如何初始化及调用

目录 概述使用TypeHandler使用方式在 select | update | insert 中加入 配置文件中指定 源码分析配置文件指定Mapper 执行query如何转换 结束 概述 阅读此文 可以达到 spring boot mybatis TypeHandler 源码如何初始化及如何调用的。 spring boot 版本为 2.7.17&#xff0c;my…

知识点滴 - 什么是AECS-PRM

AECS - PRM 是高级入境控制系统--旅客识别模块的缩写。该系统用于航空业&#xff0c;在登机过程中管理和核对乘客信息。AECS - PRM 有助于确保正确的乘客搭乘正确的航班&#xff0c;并加强安全措施。它可能涉及使用各种技术&#xff0c;如生物识别技术&#xff0c;以准确匹配乘…

深入理解Go语言GC机制

1、Go 1.3之前的标记-清除&#xff08;mark and sweep&#xff09;算法 Go 1.3之前的时候主要用的是普通的标记-清除算法&#xff0c;此算法主要由两个主要的步骤&#xff1a; 标记&#xff08;Mark phase&#xff09;清除&#xff08;Sweep phase&#xff09; 1&#xff09…

前端知识笔记(二十四)———快速创建桌面端(electron-egg)

介绍 | electron-egg electron-egg: 一个入门简单、跨平台、企业级桌面软件开发框架。 electron-egg是一个基于Electron和Egg.js的框架&#xff0c;可以用于快速构建跨平台的桌面应用程序。 1.兼容平台&#xff1a;electron-egg可以在Windows、MacOS和Linux等多个平台上运行…

Spark RDD使用教程

文章目录 1、创建RDD的三种方式2、Spark对RDD的操作2.1、Transformations&#xff08;转换&#xff09;2.2、Actions&#xff08;动作&#xff09; 1、创建RDD的三种方式 Spark提供三种创建RDD方式&#xff1a;集合、本地文件、HDFS文件。详细可以查看RDD和pair RDD文档 使用例…

7.Vue UI库

7.Vue UI库 7.1移动端常用的UI库 &#xff08;1&#xff09; Vant&#xff1a;Vant 4 - A lightweight, customizable Vue UI library for mobile web apps.A lightweight, customizable Vue UI library for mobile web apps.https://vant-ui.github.io/vant/#/zh-CN &#xf…

提升--22---ReentrantReadWriteLock读写锁

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 ReadWriteLock----读写锁1.读写锁介绍线程进入读锁的前提条件&#xff1a;线程进入写锁的前提条件&#xff1a;而读写锁有以下三个重要的特性&#xff1a; Reentran…

React 好用的工具库

1、html-react-parser HTML 到 React 解析器&#xff0c;适用于服务器 &#xff08;Node.js&#xff09; 和客户端&#xff08;浏览器&#xff09;&#xff0c;适用于React节点修改过滤等需求 解析器将 HTML 字符串转换为一个或多个 React 元素。可以将一个元素替换为另一个元素…

个体诊所电子处方系统哪个好用,推荐一款可以自由设置配方模板能够填写病历可以查询历史病历的门诊处方笺软件

一、前言 1、功能实用&#xff0c;操作简单&#xff0c;不会电脑也会操作&#xff0c;软件免安装&#xff0c;已内置数据库。 2、中医西医均可用此软件开电子处方&#xff0c;支持病历记录查询&#xff0c;药品进出库管理&#xff0c;支持配方模板一键导入电子处方。 二、电子…

理解数据库事务和回滚:概念、实例与Python脚本实现

文章目录 概念银行案例实践创建数据Python脚本中的事务回滚 结语&#xff1a;保障数据安全与完整性的关键 概念 事务&#xff08;Transaction&#xff09;: 数据库中的事务是一组不可分割的操作集合&#xff0c;它们要么全部成功&#xff0c;要么全部失败。这个概念保证了数据…

Amazon CodeWhisperer 正式可用, 并面向个人开发者免费开放

文章作者&#xff1a;深度-围观 北京——2023年4月18日&#xff0c;亚马逊云科技宣布&#xff0c;实时 AI 编程助手 Amazon CodeWhisperer 正式可用&#xff0c;同时推出的还有供所有开发人员免费使用的个人版&#xff08;CodeWhisperer Individual&#xff09;。CodeWhisperer…

SAP ABAP Tree Control 对象与ALV Grid 对象关联

Tree Control 对象与ALV Grid 对象关联 在双击 Tree 对象时&#xff0c;变更ALV Trid 对象的显示&#xff0c;实现界面如图9-11 所示。 Screen 设计界面如图9-12 所示。 主程序&#xff1a; REPORT ytest36. DATA: ok_code TYPE sy-ucomm,save_ok TYPE sy-ucomm. DATA: wa_co…

【C++】map和set的使用及注意事项

map和set的使用及注意事项 1.关联式容器2. 键值对3.set3.1接口介绍3.1.1构造3.1.2迭代器3.1.3容量3.1.4修改 3.2set使用及注意事项 4.multiset5.map6.multimap349. 两个数组的交集 1.关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xf…

vue项目解决计算后浮点数精度问题

1.1 问题描述 计算出的结果本来应该为13.8386&#xff0c;但是这里因为js精度问题&#xff0c;导致后边多了一串的0000001。 1.2 使用场景 求和&#xff0c;每个物品的单价*数量 1.3 解决办法 引入第三方库Decimal 1.4 vue项目中Decimal安装步骤 1.4.1 安装Decimal np…

C语言枚举详解,typedef简介(能看懂文字就能明白系列)

系列文章目录 C语言基础专栏 笔记详解 &#x1f31f; 个人主页&#xff1a;古德猫宁- &#x1f308; 信念如阳光&#xff0c;照亮前行的每一步 文章目录 系列文章目录&#x1f308; *信念如阳光&#xff0c;照亮前行的每一步* 前言一、枚举类型的声明枚举常量三、枚举类型的优…