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-基础-入门 简介
Aug 09 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
Python yield与实现方法代码分析
Feb 06 Python
Python多线程扫描端口代码示例
Feb 09 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
PyTorch中permute的用法详解
Dec 30 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 Python
numba提升python运行速度的实例方法
Jan 25 Python
pandas提升计算效率的一些方法汇总
May 30 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实现删除非站内外部链接实例代码
2014/06/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
javascript常用的方法分享
2015/07/01 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
微信小程序新增的拖动组件movable-view使用教程
2017/05/20 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python使用ftplib实现简易FTP客户端的方法
2015/06/03 Python
python实现用户登陆邮件通知的方法
2015/07/09 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
“学雷锋活动月”总结
2014/03/09 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
法制教育演讲稿
2014/09/10 职场文书
停车位租赁协议书
2014/09/24 职场文书
报名委托书
2015/01/29 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书