Python多线程多进程实例对比解析

 更新时间:2020年03月12日 12:43:18   作者:我太难了008  
这篇文章主要介绍了Python多线程多进程实例对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

多线程适合于多io操作

多进程适合于耗cpu(计算)的操作

# 多进程编程
# 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor


def fib(n):
  if n <= 2:
    return 1
  return fib(n - 2) + fib(n - 1)

if __name__ == '__main__':

  # 1. 对于耗cpu操作,多进程优于多线程

  # with ThreadPoolExecutor(3) as executor:
  #   all_task = [executor.submit(fib, num) for num in range(25, 35)]
  #   start_time = time.time()
  #   for future in as_completed(all_task):
  #     data = future.result()
  #     print(data)
  #   print("last time :{}".format(time.time() - start_time)) # 3.905290126800537

  # 多进程 ,在window环境 下必须放在main方法中执行,否则抛异常
  with ProcessPoolExecutor(3) as executor:
    all_task = [executor.submit(fib, num) for num in range(25, 35)]
    start_time = time.time()
    for future in as_completed(all_task):
      data = future.result()
      print(data)
    print("last time :{}".format(time.time() - start_time)) # 2.6130592823028564

可以看到在耗cpu的应用中,多进程明显优于多线程 2.6130592823028564 < 3.905290126800537

下面模拟一个io操作

# 多进程编程
# 耗cpu的操作,用多进程编程, 对于io操作来说,使用多线程编程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent.futures import ProcessPoolExecutor

def io_operation(n):
  time.sleep(2)
  return n


if __name__ == '__main__':

  # 1. 对于耗cpu操作,多进程优于多线程

  # with ThreadPoolExecutor(3) as executor:
  #   all_task = [executor.submit(io_operation, num) for num in range(25, 35)]
  #   start_time = time.time()
  #   for future in as_completed(all_task):
  #     data = future.result()
  #     print(data)
  #   print("last time :{}".format(time.time() - start_time)) # 8.00358772277832



  # 多进程 ,在window环境 下必须放在main方法中执行,否则抛异常
  with ProcessPoolExecutor(3) as executor:
    all_task = [executor.submit(io_operation, num) for num in range(25, 35)]
    start_time = time.time()
    for future in as_completed(all_task):
      data = future.result()
      print(data)
    print("last time :{}".format(time.time() - start_time)) # 8.12435245513916

可以看到 8.00358772277832 < 8.12435245513916, 即是多线程比多进程更牛逼!

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

相关文章

  • pandas数据清洗实现删除的项目实践

    pandas数据清洗实现删除的项目实践

    本文主要介绍了pandas数据清洗实现删除的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Python制作动态字符图的实例

    Python制作动态字符图的实例

    今天小编就为大家分享一篇关于Python制作动态字符图的实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • python中的错误如何查看

    python中的错误如何查看

    在本篇文章里小编给大家整理的是关于python中的错误如何查看的方法,需要的朋友们可以学习下。
    2020-07-07
  • tensorflow更改变量的值实例

    tensorflow更改变量的值实例

    今天小编就为大家分享一篇tensorflow更改变量的值实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python的Flask框架与数据库连接的教程

    Python的Flask框架与数据库连接的教程

    这篇文章主要介绍了Python的Flask框架与数据库连接的教程,是Flask框架学习当中的基本知识,需要的朋友可以参考下
    2015-04-04
  • 基于python实现雪花算法过程详解

    基于python实现雪花算法过程详解

    这篇文章主要介绍了基于python实现雪花算法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python接口自动化浅析Token应用原理

    Python接口自动化浅析Token应用原理

    本文主要介绍token基本概念、运行原理及在自动化中接口如何携带token进行访问,附含源码,内容非常详细易理解,有需要的朋友可以参考下
    2021-08-08
  • 如何将自己的python库打包成wheel文件并上传到pypi

    如何将自己的python库打包成wheel文件并上传到pypi

    这篇文章主要介绍了如何将自己的python库打包成wheel文件并上传到pypi,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python光学仿真教程实现光线追踪

    Python光学仿真教程实现光线追踪

    传统的高斯光学是建立在傍轴近似基础之上的理想成像理论,这种处理以物像关系为核心,通过基点对光路的成像特性进行描述。然而,傍轴近似在一定程度上牺牲了精确性,从而使得需要一套像差理论作为补充
    2021-10-10
  • Python查找字符串中包含的多个元素的实现

    Python查找字符串中包含的多个元素的实现

    本文详细介绍了如何使用Python查找字符串中包含的多个元素,包括基本字符串操作和使用正则表达式进行高级搜索,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03

最新评论