由于python相当易学易用,现在python也较多地用于有大量的计算需求的任务。本文介绍几个并行模块,以及实现程序并行的入门技术。本文比较枯燥,主要是为后面上工程实例做铺垫。完结篇对前期介绍的所有模块及实例进行总结,比较各并行方法的特点和异同。

所有比较都以文字形式呈现了,欢迎指正或完善,做成表格可能效果更好。

模块介绍:

爱coding:python并行计算(上):multiprocessing、multiprocess模块​zhuanlan.zhihu.com爱coding:python并行计算(上):pathos模块​zhuanlan.zhihu.com爱coding:python并行计算(上):concurrent.futures、pp模块​zhuanlan.zhihu.com

实例:

爱coding:python并行计算(下):multiprocessing模块实例​zhuanlan.zhihu.com爱coding:python并行计算(下):pathos模块实例​zhuanlan.zhihu.com爱coding:python并行计算(下):concurrent.futures、pp模块实例​zhuanlan.zhihu.com

注:以下模块、类与其他内容相同或接近,不重复介绍和比较:

multiprocess模块:与multiprocessing模块接口基本一致。

pathos.pp.pp模块:实质也即pp模块,与独立的pp模块完全相同。

pathos.multiprocessing.Pool():与multiprocess.Pool()完全相同。

pathos.multiprocessing.ProcessingPool()、pathos.pools.ProcessPool():与pathos.multiprocessing.ProcessPool()完全相同。

pathos.pp.ParallelPythonPool()、pathos.parallel.ParallelPool()、pathos.parallel.ParallelPythonPool()、pathos.pools.ParallelPool():与pathos.pp.ParallelPool()完全相同。

pathos.serial.SerialPool():实际是串行(非并行),不参与比较。

1、按并行分类

(1)阻塞(非并行):

非并行方式下,子进程串行执行(完成一个,然后开始下一个),实际不是并行。包括:

multiprocessing.Pool(),apply方法

pathos.multiprocessing.ProcessPool(),pipe方法

pathos.pp.ParallelPool(),pipe方法

pathos.pp.ParallelPool(),map方法

pathos.pp.ParallelPool(),imap方法

(2)批次并行:

批次并行指一批子进程并行执行,且直到该批次所有子进程完成后,才开始下一批次。包括:

multiprocessing.Process() #只能一批一批地添加进程,同一批次内并行

(3)异步:

异步执行指的是一批子进程并行执行,且子进程完成一个,就新开始一个,而不必等待同一批其他进程完成。包括:

multiprocessing.Pool(),apply_async方法

multiprocessing.Pool(),map方法

multiprocessing.Pool(),map_async方法

multiprocessing.Pool(),imap方法

multiprocessing.Pool(),imap_unordered方法

multiprocessing.Pool(),starmap方法

multiprocessing.Pool(),starmap_async方法

concurrent.futures.ProcessPoolExecutor(),submit方法

concurrent.futures.ProcessPoolExecutor(),map方法

pathos.multiprocessing.ProcessPool(),map方法

pathos.multiprocessing.ProcessPool(),imap方法

pathos.multiprocessing.ProcessPool(),uimap方法

pathos.multiprocessing.ProcessPool(),amap方法

pathos.multiprocessing.ProcessPool(),apipe方法

pp.Server(),submit方法

pathos.pp.ParallelPool(),apipe方法

pathos.pp.ParallelPool(),amap方法

pathos.pp.ParallelPool(),uimap方法

2、按传参分类

(1)单个任务,任务多参数:

multiprocessing.Process()

concurrent.futures.ProcessPoolExecutor(),submit方法

multiprocessing.Pool(),apply方法

multiprocessing.Pool(),apply_async方法

pathos.multiprocessing.ProcessPool(),pipe方法

pathos.multiprocessing.ProcessPool(),apipe方法

pp.Server(),submit方法

pathos.pp.ParallelPool(),pipe方法

pathos.pp.ParallelPool(),apipe方法

(2)多个任务,任务单参数:

multiprocessing.Pool(),map方法

multiprocessing.Pool(),map_async方法

multiprocessing.Pool(),imap方法

multiprocessing.Pool(),imap_unordered方法

(3)多个任务,任务多参数:

(a)func(iterable[i])形式:iterable的每个元素(元素本身也是iterable)对应func的多个参数。

multiprocessing.Pool(),starmap方法

multiprocessing.Pool(),starmap_async方法

(b)func(iterable1[i], iterable2[i], ...)形式:每个iterable对应func的一个参数。

concurrent.futures.ProcessPoolExecutor(),map方法

pathos.multiprocessing.ProcessPool(),map方法

pathos.multiprocessing.ProcessPool(),imap方法

pathos.multiprocessing.ProcessPool(),uimap方法

pathos.multiprocessing.ProcessPool(),amap方法

pathos.pp.ParallelPool(),map方法

pathos.pp.ParallelPool(),amap方法

pathos.pp.ParallelPool(),imap方法

pathos.pp.ParallelPool(),uimap方法

3、按返回分类

(1)返回任务返回值

multiprocessing.Pool(),apply方法

pathos.multiprocessing.ProcessPool(),pipe方法

pathos.pp.ParallelPool(),pipe方法

(2)返回list

multiprocessing.Pool(),map方法

multiprocessing.Pool(),starmap方法

pathos.multiprocessing.ProcessPool(),map方法

pathos.pp.ParallelPool(),map方法

(3)返回ApplyResult

返回MapResult或ApplyResult实例,通过get方法获取返回值。需要注意的是:

由于每个ApplyResult实例对应单个子进程,其get方法本身是阻塞的,因此,在进程添加过程中不可包含get方法,而应在所有进程完成后,再一起调用get方法。

对于MapResult不存在该问题,因为所有子进程只会一起返回一个MapResult实例。

包括:

multiprocessing.Pool(),apply_async方法

pathos.multiprocessing.ProcessPool(),apipe方法

pathos.pp.ParallelPool(),apipe方法

(4)返回MapResult

multiprocessing.Pool(),map_async方法

multiprocessing.Pool(),starmap_async方法

pathos.multiprocessing.ProcessPool(),amap方法

pathos.pp.ParallelPool(),amap方法

(5)返回迭代器或生成器

迭代器/生成器对内存的需求会小得多,但速度比普通方法要慢很多(未验证)。不过,对于本文的小型任务,看不出差别。

(a)按顺序:即按任务添加顺利返回。

multiprocessing.Pool(),imap方法

concurrent.futures.ProcessPoolExecutor(),map方法

pathos.multiprocessing.ProcessPool(),imap方法

pathos.pp.ParallelPool(),imap方法

(b)不按顺序:实际按任务完成顺序返回。

multiprocessing.Pool(),imap_unordered方法

pathos.multiprocessing.ProcessPool(),uimap方法

pathos.pp.ParallelPool(),uimap方法

(6)无直接返回值

multiprocessing.Process() #无直接返回值,可通过进程间通信的方式返回任务返回值。

concurrent.futures.ProcessPoolExecutor(),submit方法 #future对象可以通过result方法获取子进程任务返回值。但该方法是阻塞的,因此,应在所有子进程完成后再调用。

pp.Server(),submit方法 #Task对象可调用(即Task()),调用可返回任务返回值。但调用是阻塞的,因此,应在所有子进程完成后再调用。

python并行计算_《python并行计算(完结篇):并行方法总结》相关推荐

  1. python 退出_如果读完这篇文章不能让你入门Python,那我将永久退出编程界

    (PS:文末福利赠送 无套路,真实有效!) Python是一种动态解释型的编程语言.Python可以在Windows.UNIX.MAC等多种操作系统上使用,也可以在Java..NET开发平台上使用. ...

  2. 初识python 视频_#python day02 初识python 学习视频来源于 太白金星

    #python day02 初识python 学习视频来源于 太白金星 ''' 知识点:安装PyCharm''' # 设置鼠标条件字体大小:file ->settings # 搜索mouse E ...

  3. ipad pro能写python吗_这是一篇用 iPad Pro 写的 iPad Pro 评测

    这是一篇用 iPad Pro 写的 iPad Pro 评测 2018-11-07 17:05:00 310点赞 426收藏 203评论 要不要把 iPad 塞进包里,要不要先上个厕所,是我出门前最纠结 ...

  4. python数据模型_#PYTHON#数据模型 | 学步园

    今天,谈谈python中的数据模型,当然你可以不了解这些东西,照样可以写出漂亮的python代码,但是"知其然知其所以然"是我的作风,总是不明白python的一些机制,心里很不爽. ...

  5. python评价指标_[Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择...

    从本系列文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前五篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络.theano实现 ...

  6. 【Python面向对象编程】第11篇 特殊方法之__str__和__repr__

    本篇我们介绍如何利用 Python __str__ 和 __repr__ 方法定义对象的字符串表示,以及它们之间的区别. __str__ 方法简介 以下代码定义了一个类 Person: class P ...

  7. python低通滤波器_[Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波

    [Python图像处理] 二十三.傅里叶变换之高通滤波和低通滤波 发布时间:2019-04-28 20:35, 浏览次数:2739 , 标签: Python 该系列文章是讲解Python OpenCV ...

  8. 【Python面向对象编程】第12篇 特殊方法之__eq__

    本篇我们学习如何利用 Python __eq__ 方法比较两个对象. eq 方法简介 以下是一个 Person 类,包含了三个属性:first_name.last_name 以及 age. class ...

  9. 汉诺塔问题递归算法python代码_[python]汉诺塔问题递归实现

    一.问题描述及算法步骤 汉诺塔问题的大意是有三根柱子a, b, c,现在a柱有N个盘子从下往上尺寸递减排列,要求: 1. 将a上的盘子移动到c柱上; 2. 每次移动一个盘子; 3. 柱子上的盘子始终必 ...

  10. python音频合成_音频拼接的简单实现方法(python一种,java两种)

    音频拼接,就是5s+5s=10s的这种拼接. 需要修改的地方都是有三处,在代码里标注好了. 一.Python实现: Python3 #!/usr/bin/env python # -*- coding ...

最新文章

  1. 理解五个基本概念,让你更像机器学习专家
  2. RAC 安装patch 后启动实例 报错 ORA-00439 feature not enabled- Real Application Clusters 解决方法...
  3. 通过DBA_SOURCE定位SQL语句属于哪个存储过程
  4. c# 获取cad文档的路径_C# 打开以对话框,获取文件夹路径 、文件的路径、文件名...
  5. [置顶] NoSQl mongodb数据库 配置篇
  6. 计算机管理关机在哪,电脑点了关机为什么却关不了
  7. JS如何判断安卓还是iOS 一种比较被认同的方式
  8. elasticsearch集群选举源码解析
  9. springboot requestmapping 正则_SpringBoot三招组合拳,手把手教你打出优雅的后端接口...
  10. python查找字符串出现次数_python实现从字符串中找出字符1的位置以及个数的方法...
  11. 复化辛普森公式求二重积分matlab源码及例题
  12. Atitit.程序包装exe启动器 打包 发布 设计 -生成exe java
  13. makefile编写模板
  14. 做独立淘客app有哪些运营方法
  15. 转!快速搭建视频直播平台
  16. 135编辑器html怎么复制,微信公众号怎么复制别人的图文排版(图文模板复制方法)...
  17. 如何应对微信群舆情?
  18. 行测-言语理解与表达-逻辑填空
  19. 关于钢材出口关税的问题
  20. HC-SR04超声波模块

热门文章

  1. 施密特触发器原理图解
  2. 程序员接到项目之前和之后的表现,网友:太搞笑了!
  3. 软驱安装服务器系统,无光驱无软驱笔记本系统安装一法
  4. 具有最佳性价比的Mac
  5. Android开发——Android四大组件
  6. 蓝牙耳机便宜的好牌子,HiFi级别音质蓝牙耳机
  7. android radiogroup 点击事件,RadioGroup组与onCheckedChanged事件
  8. OpenMV学习--sensor模块
  9. Revit二次开发之如何选取Revit元素【比目鱼原创】
  10. Idea 2020.3 显示Memory Indicator