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发送邮件接收邮件示例分享
Jan 21 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
Django框架实现的分页demo示例
May 25 Python
python文件和文件夹复制函数
Feb 07 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
Python第三方包PrettyTable安装及用法解析
Jul 08 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 Python
python删除csv文件的行列
Apr 06 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 执行系统命令的方法
2009/07/07 PHP
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
php英文单词统计器
2016/06/23 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
javascript事件问题
2009/09/05 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
2017/08/16 jQuery
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
深入flask之异步非堵塞实现代码示例
2018/07/31 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
python lxml中etree的简单应用
2019/05/10 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
浅谈Python协程
2020/06/17 Python
Python 绘制可视化折线图
2020/07/22 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
协议书模板
2014/04/23 职场文书
车位出租协议书范本
2016/03/19 职场文书
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android