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 06 Python
Python实现去除代码前行号的方法
Mar 10 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
django的登录注册系统的示例代码
May 14 Python
便捷提取python导入包的属性方法
Oct 15 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
如何写python的配置文件
Jun 07 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
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php+mysql 实现身份验证代码
2010/03/24 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
使用Python写CUDA程序的方法
2017/03/27 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Python中的id()函数指的什么
2017/10/17 Python
python并发和异步编程实例
2018/11/15 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
python能做什么 python的含义
2019/10/12 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
党的群众路线教育实践活动个人整改方案
2014/10/25 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技