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备份Mysql脚本
Aug 11 Python
python 生成目录树及显示文件大小的代码
Jul 23 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
如何用python整理附件
May 13 Python
python多线程与多进程及其区别详解
Aug 08 Python
使用python去除图片白色像素的实例
Dec 12 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
Python 实现将某一列设置为str类型
Jul 14 Python
python在CMD界面读取excel所有数据的示例
Sep 28 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调用三种数据库的方法(1)
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
2015/12/10 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
初识Node.js
2014/09/03 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
JQuery异步获取返回值中文乱码的解决方法
2015/01/29 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
详解javascript函数的参数
2015/11/10 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python实现的简单dns查询功能示例
2017/05/24 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
python实现顺序表的简单代码
2018/09/28 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python异步Web框架sanic的实现
2020/04/27 Python
英国美术用品购物网站:Cass Art
2019/10/08 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
大学本科生的个人自我评价
2013/12/09 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
学校就业保障协议书
2019/06/24 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS