Python 以极高的开发效率著称,而运行速度则“没那么快”。

虽然,在现代计算机体系架构下,系统的运行效率并不完全取决于编程语言,但程序员仍有可能从编程技巧着手,让自己的代码“跑得更快些”。

对 Python 而言,我们可以通过“并行化”来实现程序的加速。

简单而言,并行计算允许你“同时”执行多个运算任务,这样就可以减少程序运行所需要的总耗时了。

这听起来有点笼统,并且你可能感觉实现起来会有些复杂。别急,请再花大概 50 秒来了解并行计算的实现。

我们来看一个使用 Python 实现并行计算的例子。这个例子仅用到了内建于 Python 中的两个工具,简单实用。

首先,需要一些准备工作。

我们将导入两个模块:collections 和 multiprocessing,以便定义我们需要的数据结构,以及来实现并行计算。import collectionsimport multiprocessing

接着,我们使用“collections.namedtuple”来定义一个新的不可变数据类型:Scientist,它包含 name 和 born 两个属性。Scientist = collections.namedtuple( 'Scientist' , [ 'name', 'born' ])

我们使用这个数据类型定义一组数据:scientists = (Scientist(name='Ada Lovelace', born=1815),Scientist(name='Emmy Noether', born=1882),Scientist(name='Marie Curie', born=1867),Scientist(name='Tu Youyou', born=1930),Scientist(name='Ada Yonath', born=1939),Scientist(name='Vera Rubin', born=1928),Scientist(name='Sally Ride', born=1951),)

然后,我们来定义一个数据处理函数,它接受一个 Scientist 对象,返回一个包含 Scientist 名称和年龄的 dict 对象。def process_item(item):return {'name' : item.name,'age' : 2021 - item.born}

这个 process_item 函数其实就代表了一个典型的数据处理过程。

我们出于演示目的使得它简单明了,但你可以为其提供更多代码,以使得它可以完成更复杂的功能。

现在到了展示并行计算魔法的时候了,请接着再往下浏览最关键的 20 秒。

我们将构建一个进程池,这样就可以将运算分布到宿主机所有可用的 CPU 上。pool = multiprocessing.Pool()

我们需要调用这个 pool 的 map() 方法,以并行批处理的方式将数据处理函数 process_item() 应用到 scientists 元组上。result = pool.map( process_item, scientists )

看官请注意,如何处理批量数据、如何将处理任务分配到多个 CPU 上、如何执行计算任务、以及如何收集处理结果,这些看似复杂的工作都由 multiprocessing 进程池来为我们完成了。很奇妙很厉害吧!

最后,我们该收尾了,花 5 秒时间将运行结果 result 打印到控制台窗口。print( tuple( result ) )

我们需要将这三行代码放在if __name__ == '__main__': 代码块中,否则会报错:AttributeError: module '__main__' has no attribute '__spec__'

应该这样放置代码:if __name__ == '__main__':pool = multiprocessing.Pool()result = pool.map(process_item, scientists)print(tuple(result))

程序代码全部完成。看一下运行结果吧:({'name': 'Ada Lovelace', 'age': 206}, {'name': 'Emmy Noether', 'age': 139}, {'name': 'Marie Curie', 'age': 154}, {'name': 'Tu Youyou', 'age': 91}, {'name': 'Ada Yonath', 'age': 82}, {'name': 'Vera Rubin', 'age': 93}, {'name': 'Sally Ride', 'age': 70})

结语:

怎么样,用 Python 实现并行计算是不是很简单?

当然,你应该理解,技术并非难点,关键是你需要合理设计数据集,以使得它们适于被这个并行框架处理。

并行计算 python_一分钟了解 Python 中的并行计算相关推荐

  1. python点的作用-一分钟了解Python中“*”的作用

    一分钟了解Python中"*"的作用 在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 *和**,下面分别讲解其作用. 调用函数时使用*和 ** 假设有函数 def te ...

  2. python中点的作用_一分钟了解Python中“*”的作用

    一分钟了解Python中"*"的作用 在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 *和**,下面分别讲解其作用. 调用函数时使用*和 ** 假设有函数 def te ...

  3. python dask_使用 Dask 在 Python 中进行并行计算 | Linux 中国

    原标题:使用 Dask 在 Python 中进行并行计算 | Linux 中国 Dask 库可以将 Python 计算扩展到多个核心甚至是多台机器. -- Moshe Zadka 关于 Python ...

  4. python中int input_两分钟了解python中的input函数

    两分钟了解python中的input函数 input函数在python中是一个内建函数,其从标准输入中读入一个字符串,并自动忽略换行符.下面我们就来看看input函数的具体用法吧. #函数inputm ...

  5. 循环 直到 python_如果您在Python中存在慢循环,则可以对其进行修复……直到无法解决为止...

    循环 直到 python by Maxim Mamaev 马克西姆·马马耶夫(Maxim Mamaev) Let's take a computational problem as an exampl ...

  6. csv格式清洗与转换python_实例详解Python中 CSV格式清洗与转换

    Python中 CSV格式清洗与转换的实例代码 题目: CSV格式清洗与转换 描述 附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬ ...

  7. java单引号 python_单引号与Python中的双引号

    我喜欢在用于插值的字符串或自然语言消息中使用双引号,对于小符号类型的字符串使用单引号,但是如果字符串包含引号,或者如果我忘记,则会打破规则. 对于正则表达式,我使用三重双引号作为docstrings和 ...

  8. python dask_使用 Dask 在 Python 中进行并行计算

    Dask 库可以将 Python 计算扩展到多个核心甚至是多台机器. 关于 Python 性能的一个常见抱怨是全局解释器锁(GIL).由于 GIL,同一时刻只能有一个线程执行 Python 字节码.因 ...

  9. 5分钟了解 Python 中的super函数是如何实现继承的

    Py 2.x 和 Py 3.x 中有一个很大的区别就是类,无论是类的定义还是类的继承.Py 3.x 中类的继承可以直接使用 super() 关键字代替原来的 super(Class, self). 那 ...

最新文章

  1. Linux字体显示不同颜色
  2. AJG(Academic Journal Guide,学术期刊指南)
  3. text-shadow
  4. Android Service(7)--完结篇
  5. python学习之路-继承
  6. leetcode 877. Stone Game | 877. 石子游戏(递归/动态规划/数学解法)
  7. 洛谷P1173:[NOI2016] 网格(tarjan、离散化)
  8. mysql 更新时间加数字_Mysql实战45讲笔记:8、聚合函数count
  9. @excel注解_Excel导入导出Java解决方案推荐
  10. 常见的新算法的标准测试函数(Ackely,Rastrigin,Griewangk,SumSquartes,Sphere,Quartic,Schwefel' Problem等)
  11. 数字化转型最致命的5个误区
  12. MATLAB2017深度学习工具箱总结
  13. 语音聊天室 anyHouse 使用手册
  14. java网络编程实现聊天小程序
  15. 论文常用出图软件(Matlab,XMind,Viso,ppt)以及格式选择(eps,svg,tif,png)
  16. 医疗数据之医院管理型数据仓库解决方案
  17. ansys添加力矩_ANSYS中加载力矩
  18. 蓝凌生态OA,重新定义中大型企业数字化办公
  19. 视频格式转换器下载哪个好?分享:3种TS到MP4的转换器
  20. GitLab 在Linux LinuxMint(Untuntu ver)上的安装方法

热门文章

  1. Hexo-Next 主题博客个性化配置超详细,超全面(两万字)
  2. vue 设置页面标题,微信公众号内嵌H5标题顶到顶部
  3. List中删除元素的6种方法比较--前两种就是坑,因为size指针前移。
  4. opentype字体下载_OpenType字体系统如何工作
  5. word 中同样的单倍行距,不一样的行距?
  6. 我最喜欢的人生格言---乘风破浪会有时,直挂云帆济沧海
  7. 安卓XML解析的几种方式(DOM,SAX,PULL..)
  8. nginx中的防盗链
  9. 二、Nginx 代理
  10. PHP 微服务开发框架