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自动化测试实例解析
Sep 28 Python
使用Python实现一个简单的项目监控
Mar 31 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
python使用PIL模块实现给图片打水印的方法
May 22 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
基于python socketserver框架全面解析
Sep 21 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
python异常处理和日志处理方式
Dec 24 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
Tensorflow分批量读取数据教程
Feb 07 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
Jun 03 Python
浅析Python requests 模块
Oct 09 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
第1次亲密接触PHP5(2)
2006/10/09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
Yii2中datetime类的使用
2016/12/17 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
jQuery 如何给Carousel插件添加新的功能
2016/04/18 Javascript
简单的js表格操作
2016/09/24 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
vue.config.js常用配置详解
2019/11/14 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
关于Django外键赋值问题详解
2017/08/13 Python
Python命令行解析模块详解
2018/02/01 Python
基于Python List的赋值方法
2018/06/23 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
python 实现汉诺塔游戏
2020/11/28 Python
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
商业企业管理专业求职信
2014/07/10 职场文书
个人自荐书范文
2015/03/09 职场文书
情人节单身感言
2015/08/03 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python