python 多进程并行编程 ProcessPoolExecutor的实现

 更新时间:2019年10月11日 14:28:54   作者:颹蕭蕭  
这篇文章主要介绍了python 多进程并行编程 ProcessPoolExecutor的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

使用 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
'''

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作

    pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作

    这篇文章主要介绍了pytorch模型载入之gpu和cpu互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python Websocket服务端通信的使用示例

    Python Websocket服务端通信的使用示例

    这篇文章主要介绍了Python Websocket服务端通信的使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Python数据分析从入门到进阶之分类算法全面教程

    Python数据分析从入门到进阶之分类算法全面教程

    数据分析是处理和解释数据以发现有用信息和洞察的过程,其中,分类算法是数据分析领域的一个重要组成部分,它用于将数据分为不同的类别或组,本文将介绍分类算法的基本概念和进阶技巧,以及如何在Python中应用这些算法,包括示例代码和实际案例
    2023-11-11
  • Pytest+Allure使用示例教程

    Pytest+Allure使用示例教程

    Allure是开源的免费的自动化测试报告,支持Java,Python,我们来看看如何使用Python pytest与Allure整合,输出漂亮的测试报告,这篇文章主要介绍了Pytest+Allure使用教程,需要的朋友可以参考下
    2023-12-12
  • Jupyter Notebook 如何修改字体和大小以及更改字体样式

    Jupyter Notebook 如何修改字体和大小以及更改字体样式

    这篇文章主要介绍了Jupyter Notebook 如何修改字体和大小以及更改字体样式的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 分享4个方便且好用的Python自动化脚本

    分享4个方便且好用的Python自动化脚本

    自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,直白的就是为了节省人力、时间或硬件资源,提高测试效率,这篇文章主要给大家分享介绍了3个方便且好用的Python自动化脚本,需要的朋友可以参考下
    2022-02-02
  • 我喜欢你 抖音表白程序python版

    我喜欢你 抖音表白程序python版

    我喜欢你!这篇文章主要为大家详细介绍了抖音表白程序python版的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • python dataframe获得指定行列实战代码

    python dataframe获得指定行列实战代码

    对于一个DataFrame,常常需要筛选出某列为指定值的行,下面这篇文章主要给大家介绍了关于python dataframe获得指定行列的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Python按条件删除Excel表格数据的方法(示例详解)

    Python按条件删除Excel表格数据的方法(示例详解)

    本文介绍基于Python语言,读取Excel表格文件,基于我们给定的规则,对其中的数据加以筛选,将不在指定数据范围内的数据剔除,保留符合我们需要的数据的方法,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • Python使用腾讯云API实现短信验证码功能

    Python使用腾讯云API实现短信验证码功能

    使用Python与腾讯云接口对接,实现短信验证码功能变得非常简单,只需要几行代码就能够轻松实现短信的发送,无须关心复杂的短信协议和底层实现,读者可以根据自己的实际需求,灵活使用腾讯云短信SDK提供的API来实现更丰富的短信功能
    2024-01-01

最新评论