python如何加速计算密集型任务2?

embedded/2024/10/21 11:45:04/

问题描述:

python中,有一个函数,其功能是进行某种计算,需要传入一些参数,计算完成后传回结果,参数是a,b,c,d,分别从列表中取值,返回值是xx,yy,分别是一个列表,调用其一次大概要1s的时间,现在需要通过for循环调用其350次,保存每次调用结果(可能是合并成一个列表),腺癌要加速该代码?

使用 multiprocessing 模块:

from multiprocessing import Poolimport time# 假设这是你的函数def compute(a, b, c, d):    # 这里是计算过程,我们假设计算需要1秒    import time    time.sleep(1)  # 模拟耗时的计算    xx = [a, b]    yy = [c, d]    return xx, yy# 这是你的参数列表A = list(range(1, 351))  # 从1到350的整数列表B = [i * 2 for i in A]   # 假设B是A的两倍C = [i * 3 for i in A]   # 假设C是A的三倍D = [i * 4 for i in A]   # 假设D是A的四倍# 将A, B, C, D组合成参数对params = [(a, b, c, d) for a, b, c, d in zip(A, B, C, D)]# 使用 multiprocessing 的 Pool 来并行计算if __name__ == '__main__':    start_time = time.time()  # 记录开始时间    with Pool(processes=4) as pool:  # 你可以根据你的 CPU 核心数来设置进程数        results = pool.starmap(compute, params)    end_time = time.time()  # 记录结束时间    # 合并结果    all_xx = [result[0] for result in results]    all_yy = [result[1] for result in results]    # 打印结果的一部分以验证    print("First few xx:", all_xx[:5])    print("First few yy:", all_yy[:5])    # 打印执行时间    print(f"Execution time: {end_time - start_time:.2f} seconds")

使用concurrent.futures模块:

from concurrent.futures import ProcessPoolExecutorimport time# 假设这是你要调用的计算密集型函数def compute(a, b, c, d):    time.sleep(1)  # 模拟计算过程    xx = [a, b]  # 模拟计算结果    yy = [c, d]  # 模拟计算结果    return xx, yy# 主函数def main():    start_time = time.time()    # 参数列表    A = list(range(1, 351))    B = [i * 2 for i in A]    C = [i * 3 for i in A]    D = [i * 4 for i in A]    params = list(zip(A, B, C, D))  # 将四个列表组合成一个参数列表    # 结果列表    results = []    # 使用ProcessPoolExecutor创建进程池    with ProcessPoolExecutor() as executor:        # 使用executor.map并行执行函数        results = list(executor.map(compute, *zip(*params)))    end_time = time.time()    print(f"Total time taken: {end_time - start_time} seconds")    # 合并结果    all_xx = [result[0] for result in results]    all_yy = [result[1] for result in results]    print(f"First few xx: {all_xx[:10]}")  # 打印前10个xx结果作为示例    print(f"First few yy: {all_yy[:10]}")  # 打印前10个yy结果作为示例if __name__ == "__main__":    main()

输出:

Total time taken: 88.80965089797974 secondsFirst few xx: [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10], [6, 12], [7, 14], [8, 16], [9, 18], [10, 20]]First few yy: [[3, 4], [6, 8], [9, 12], [12, 16], [15, 20], [18, 24], [21, 28], [24, 32], [27, 36], [30, 40]]


http://www.ppmy.cn/embedded/111378.html

相关文章

03 Flask-添加配置信息

回顾之前学习的内容 02 Flask-快速上手 Flask 中最简单的web应用组成 1. 导入核心库 Flask from flask import Flask2. 实例化 web应用 注意:不要漏了 app Flask(__name__) 中的 __name__ 表示:是从当前的py文件实例化 app Flask(__name__)3. 创…

计算机视觉硬件知识点整理(三):镜头

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、镜头的基础知识与类型二、镜头知识点总结:2.1 光圈2.2 景深2.3 调制传递函数:2.4 视场角2.5 焦距2.6 滤光片 前言 在这个信息化飞速…

Vue 2 生命周期详解

Vue 2 的生命周期是指 Vue 实例从创建到销毁的整个过程。在这个过程中,Vue 提供了多个生命周期钩子,允许我们在不同阶段执行代码。以下是 Vue 2 生命周期的详细解析: 1. 创建阶段 (Creation) beforeCreate: 在实例初始化之后,数…

Llama Factory :百种以上语言模型的统一高效微调框架

人工智能咨询培训老师叶梓 转载标明出处 大模型适应到特定下游任务时,传统的全参数微调方法成本高昂,因此,研究者们一直在探索更高效的微调技术。由北京航空航天大学和北京大学的研究团队提出了一个名为Llama Factory的统一框架,…

数据结构——单链表基本操作的实现

前言 参考 该部分知识参考于《数据结构(C语言版 第2版)》29 ~ 36页 注意 这里的ElemType是以Book类型的数据作为举例,如果需要更改可以自行改变! 🌈每一个清晨,都是世界对你说的最温柔的早安&#xff…

在docker中安装 zendesk/maxwell 失败,解决方法

文章目录 1、拉取镜像失败2、一键设置镜像加速:修改文件 /etc/docker/daemon.json(如果不存在则创建)3、保存好之后 执行以下两条命令 1、拉取镜像失败 [rootlocalhost docker]# docker pull zendesk/maxwell Using default tag: latest Err…

vue事件修饰符

参考 https://cn.vuejs.org/guide/essentials/event-handling.html#event-modifiers 常用事件修饰符 .stop.prevent.self.capture.once.passive示例 阻止默认事件 使用.prevent属性(推荐) <script> export de

【计算机网络】HTTP相关问题与解答

此篇文章内容会不定期更新&#xff0c;仅作为学习过程中的笔记记录 目录 一、HTTP请求和响应报文是怎样的&#xff1f; 1、请求报文 2、响应报文 二、HTTP请求方法有哪些&#xff1f; GET HEAD POST PUT DELETE PATCH OPTIONS TRACE CONNECT 三、GET请求与POST请…