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中is与双等于号“==”的区别示例详解
Nov 21 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
基于Python实现扑克牌面试题
Dec 11 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
python能自学吗
Jun 18 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
Nov 22 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 Python
Python使用openpyxl复制整张sheet
Mar 24 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
多数据表共用一个页的新闻发布
2006/10/09 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php支持断点续传、分块下载的类
2016/05/02 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
使用Javascript和DOM Interfaces来处理HTML
2006/10/09 Javascript
微博@符号的用户名提示效果。(想@到谁?)
2010/11/05 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
Python3搜索及替换文件中文本的方法
2015/05/22 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
python fabric实现远程部署
2017/01/05 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
提高EJB性能都有哪些技巧
2012/03/25 面试题
硕士研究生自我鉴定范文
2013/12/27 职场文书
肯尼迪就职演说稿
2013/12/31 职场文书
小学生打架检讨书
2014/01/26 职场文书
优秀小学生家长评语
2014/01/30 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle
PO模式在selenium自动化测试框架的优势
2022/03/20 Python
MySQL 语句执行顺序举例解析
2022/06/05 MySQL