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中执行shell命令的几个方法小结
Sep 18 Python
Python实现获取域名所用服务器的真实IP
Oct 25 Python
python3实现跳一跳点击跳跃
Jan 08 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
深入理解Django-Signals信号量
Feb 19 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
python生成xml时规定dtd实例方法
Sep 21 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python基于Serializer实现字段验证及序列化
Nov 04 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
如何用Python和JS实现的Web SSH工具
Feb 23 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
模拟flock实现文件锁定
2007/02/14 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
表头固定(利用jquery实现原理介绍)
2012/11/08 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python生成指定长度的随机数密码
2014/01/23 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
对Python中的@classmethod用法详解
2018/04/21 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
几道数据库的概念性面试题
2014/05/30 面试题
大学自主招生推荐信
2014/05/10 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
安全生产月宣传标语
2014/10/06 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
北京天坛导游词
2015/02/12 职场文书
员工自我评价范文
2015/03/11 职场文书
党员带头倡议书
2015/04/29 职场文书
村党组织公开承诺书
2015/04/30 职场文书
小学生家长意见
2015/06/03 职场文书
2015双创工作总结
2015/07/24 职场文书
小学远程教育工作总结
2015/08/13 职场文书
银行求职信怎么写
2019/06/20 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python