使用 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 底层原理processpoolexecutor_python 多进程并行编程 ProcessPoolExecutor的实现相关推荐

  1. python的多线程和多进程网络编程

    二十八.python的多线程和多进程网络编程 线程和进程关系: 进程是具有独立功能的程序,进程是系统进行资源分配和调度的一个独立单位 线程是进程的一个实体,是cpu调度的基本单位,它是比进程更小的能独 ...

  2. Python 多进程并行编程实践: multiprocessing 模块

    转载:http://python.jobbole.com/87645/ 前言 并行计算是使用并行计算机来减少单个计算问题所需要的时间,我们可以通过利用编程语言显式的说明计算中的不同部分如何再不同的处理 ...

  3. python 底层原理_Python字典的核心底层原理讲解

    字典对象的核心是散列表.散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做 bucket.每个 bucket 有两部分:一个是键对象的引用,一个是值对象的引用.所有 bucket 结构和 ...

  4. java虚拟机线程调优与底层原理分析_Java并发编程——多线程的底层原理

    " Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的 ...

  5. python 底层原理_Python 探针实现原理

    本文将简单讲述一下 Python 探针的实现原理. 同时为了验证这个原理,我们也会一起来实现一个简单的统计指定函数执行时间的探针程序. 探针的实现主要涉及以下几个知识点: sys.meta_path ...

  6. python底层原理 知乎_用Python写代码,一分钟搞定一天工作量,同事直呼:好家伙...

    来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 前几天有一个读者说最近要整理几千份文件,头都要整秃了,不知道能不能用Python解决,我们来看一下,你也可以思考一下. 由于涉及文件私密 ...

  7. python并行编程语言_Python3 系列之 并行编程

    Python Python开发 Python语言 Python3 系列之 并行编程 进程和线程 进程是程序运行的实例.一个进程里面可以包含多个线程,因此同一进程下的多个线程之间可以共享线程内的所有资源 ...

  8. python多线程和多进程——python并行编程实验

    工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: 进程:对于操作系统 ...

  9. python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验

    工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...

最新文章

  1. 程序员成长路上的团队修炼之道
  2. 独家 | 手把手教你使用OpenCV库(附实例、Python代码解析)
  3. 计算机无法识别华为m3,华为8寸M3(非青春版)电脑连接问题报告
  4. skt框架开发设计1
  5. 1099: 角谷猜想(多实例测试)
  6. 海底捞、百果园、大娘水饺凭什么可以疯狂扩张门店?
  7. c++ pair类型的基本问题
  8. steam游戏图标失效_如何将非Steam游戏添加到Steam并应用自定义图标
  9. 苹果雪豹操作系统正式版_如何不花一分钱用上iPhone11?更新iOS13正式版吧
  10. 第六讲:AD、DA的工作原理及实现(郭天祥)
  11. android 系统开启流量,安卓系统抖音流量权限怎么打开
  12. 合约战事风云 |链捕手
  13. html简单淘宝搜索框怎么做,天猫前端系列教材 (八)- 公共页面 - 简单搜索栏...
  14. 航空中的QNH QNE QFE分别都是什么
  15. WORD文档无法编辑解决
  16. 网络爬虫(一):爬虫基础原理
  17. 全网最全Fiddler攻略,十分钟了解Fiddler抓包
  18. JAVA异常:java.lang.AbstractMethodError: ...tomcat.websocket.server.WsSessionListener.sessionCreated
  19. Android 开发之漫漫长途 XIV——ListView
  20. 绿色环保型电脑向我们走来

热门文章

  1. php 标点符号,php 过滤英文标点符号及过滤中文标点符号代码
  2. action无法传参数给html页面,HTML 解决form表单提交时,action url中参数无效问题
  3. 12伏的蓄电池有几个单格组成_蓄电池的结构和识别
  4. Asterisk针对Mysql的extconfig.conf配置
  5. 开源应用架构之asterisk
  6. socket 编程入门教程(一)TCP server 端:4、构造函数涉及的概念
  7. 【WinCE】流设备驱动简介及GPIO驱动的实现
  8. Iterator模式
  9. python输入序列语句_Python基础教程(一) - 序列:字符串、列表和元组
  10. 【转】VS技巧—任务列表Task List(ToDoList)