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中__call__用法实例
Aug 29 Python
python time模块用法实例详解
Sep 11 Python
20个常用Python运维库和模块
Feb 12 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
Python代码太长换行的实现
Jul 05 Python
简单了解python数组的基本操作
Nov 26 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
jupyter notebook清除输出方式
Apr 10 Python
python nohup 实现远程运行不宕机操作
Apr 16 Python
PyTorch 中的傅里叶卷积实现示例
Dec 11 Python
Pandas直接读取sql脚本的方法
Jan 21 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实现链结人气统计
2006/10/09 PHP
PHP无限分类(树形类)
2013/09/28 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JS+CSS实现仿新浪微博搜索框的方法
2015/02/24 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python numpy 常用函数总结
2017/12/07 Python
Django-Model数据库操作(增删改查、连表结构)详解
2019/07/17 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
洗发露广告词
2014/03/14 职场文书
销售口号霸气押韵
2015/12/24 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
初一语文教学反思
2016/03/03 职场文书
利用Matlab绘制各类特殊图形的实例代码
2021/07/16 Python
MYSQL 运算符总结
2021/11/11 MySQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL