python 多进程并行编程 ProcessPoolExecutor的实现


Posted in Python onOctober 11, 2019

使用 ProcessPoolExecutor

from concurrent.futures import ProcessPoolExecutor, as_completed
import random

斐波那契数列

当 n 大于 30 时抛出异常

def fib(n):
  if n > 30:
    raise Exception('can not > 30, now %s' % n)
  if n <= 2:
    return 1
  return fib(n-1) + fib(n-2)

准备数组

nums = [random.randint(0, 33) for _ in range(0, 10)]
'''
[13, 17, 0, 22, 19, 33, 7, 12, 8, 16]
'''

方案一:submit

submit 输出结果按照子进程执行结束的先后顺序,不可控

with ProcessPoolExecutor(max_workers=3) as executor:
    futures = {executor.submit(fib, n):n for n in nums}
    for f in as_completed(futures):
      try:
        print('fib(%s) result is %s.' % (futures[f], f.result()))
      except Exception as e:
        print(e)
'''
fib(13) result is 233.
fib(17) result is 1597.
fib(0) result is 1.
fib(22) result is 17711.
fib(19) result is 4181.
can not > 30, now 33
fib(7) result is 13.
fib(12) result is 144.
fib(8) result is 21.
fib(16) result is 987.

'''

等价写法:

with ProcessPoolExecutor(max_workers=3) as executor:
    futures = {}
    for n in nums:
      job = executor.submit(fib, n)
      futures[job] = n

    for job in as_completed(futures):
      try:
        re = job.result()
        n = futures[job]
        print('fib(%s) result is %s.' % (n, re))
      except Exception as e:
        print(e)
'''
fib(13) result is 233.
fib(17) result is 1597.
fib(0) result is 1.
fib(22) result is 17711.
can not > 30, now 33
fib(7) result is 13.
fib(19) result is 4181.
fib(8) result is 21.
fib(12) result is 144.
fib(16) result is 987.
'''

方案二:map

map 输出结果按照输入数组的顺序

缺点:某一子进程异常会导致整体中断

with ProcessPoolExecutor(max_workers=3) as executor:
    try:
      results = executor.map(fib, nums)
      for num, result in zip(nums, results):
        print('fib(%s) result is %s.' % (num, result))
    except Exception as e:
      print(e)
'''
fib(13) result is 233.
fib(17) result is 1597.
fib(0) result is 1.
fib(22) result is 17711.
fib(19) result is 4181.
can not > 30, now 33
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的urllib模块显示下载进度示例
Jan 17 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python中的sort方法使用详解
Jul 25 Python
Python实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
理论讲解python多进程并发编程
Feb 09 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
更新升级python和pip版本后不生效的问题解决
Apr 17 Python
python使用opencv resize图像不进行插值的操作
Jul 05 Python
scrapy头部修改的方法详解
Dec 06 Python
pytorch MSELoss计算平均的实现方法
May 12 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 #Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 #Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 #Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 #Python
Python中的延迟绑定原理详解
Oct 11 #Python
python pycharm的安装及其使用
Oct 11 #Python
详解Python3迁移接口变化采坑记
Oct 11 #Python
You might like
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php限制文件下载速度的代码
2015/10/20 PHP
yii用户注册表单验证实例
2015/12/26 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
PHP strcmp()和strcasecmp()的区别实例
2016/11/05 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
javascript字符串拼接的效率问题
2010/12/25 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
jQuery操作cookie
2016/08/08 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
2017/04/20 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[02:33]2018DOTA2亚洲邀请赛赛前采访——LGD
2018/04/04 DOTA
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
python Django批量导入数据
2016/03/25 Python
自学python的建议和周期预算
2019/01/30 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
2019/09/26 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
竞选大队长演讲稿
2014/04/29 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
党风廉正建设责任书
2015/01/29 职场文书
大学学生会辞职信
2015/05/13 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
Python之基础函数案例详解
2021/08/30 Python