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的ORM框架中的SQLAlchemy库的映射关系
Apr 25 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python获取当前公网ip并自动断开宽带连接实例代码
Jan 12 Python
python使用锁访问共享变量实例解析
Feb 08 Python
pandas通过索引进行排序的示例
Nov 16 Python
对python的输出和输出格式详解
Dec 08 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
基于python代码批量处理图片resize
Jun 04 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
python单元测试框架pytest的使用示例
Oct 07 Python
Python如何配置环境变量详解
May 18 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/11/10 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
PHP代码优化技巧小结
2015/09/29 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
推荐一个自己用的封装好的javascript插件
2015/01/29 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
Python模块包中__init__.py文件功能分析
2016/06/14 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
五年级英语教学反思
2014/01/31 职场文书
2016关于军训的心得体会
2016/01/11 职场文书