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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
Python简单进程锁代码实例
Apr 27 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
Numpy的简单用法小结
Aug 28 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
Python基于traceback模块获取异常信息
Jul 23 Python
python tqdm实现进度条的示例代码
Nov 10 Python
python遍历路径破解表单的示例
Nov 21 Python
一起来学习Python的元组和列表
Mar 13 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获取数组的键与值方法小结
2015/06/13 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
asp 的 分词实现代码
2007/05/24 Javascript
javascript for循环设法提高性能
2010/02/24 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
微信小程序中data-key属性之数据传输(经验总结)
2020/08/22 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python自动zip压缩目录的方法
2015/06/28 Python
python搭建微信公众平台
2016/02/09 Python
python记录程序运行时间的三种方法
2017/07/14 Python
python中的随机函数random的用法示例
2018/01/27 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
自考生自我鉴定范文
2013/10/01 职场文书
大四自我鉴定范文
2013/10/06 职场文书
学生处主任岗位职责
2013/12/01 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
建筑施工安全责任书
2014/07/24 职场文书
运动会800米赞词
2015/07/22 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL