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, 即是多线程比多进程更牛逼!

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

相关文章

  • python excel使用xlutils类库实现追加写功能的方法

    python excel使用xlutils类库实现追加写功能的方法

    今天小编就为大家带来一篇python excel使用xlutils类库实现追加写功能的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • pandas预处理部分地区数据案例

    pandas预处理部分地区数据案例

    本文主要介绍了pandas预处理部分地区数据案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python学习实操案例(四)

    python学习实操案例(四)

    这篇文章主要介绍了python学习实操案例,这一篇小编给大家带来的是列表,所以这里是和列表有关的案例,需要的小伙伴可以参考一下,希望对你有所帮助<BR>
    2022-02-02
  • Python基于opencv调用摄像头获取个人图片的实现方法

    Python基于opencv调用摄像头获取个人图片的实现方法

    今天小编就为大家分享一篇关于Python基于opencv调用摄像头获取个人图片的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • 玩转python selenium鼠标键盘操作(ActionChains)

    玩转python selenium鼠标键盘操作(ActionChains)

    这篇文章主要为大家详细介绍了python selenium鼠标键盘操作(ActionChains),教大家如何玩转selenium鼠标键盘,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?

    这篇文章主要介绍了Django项目如何配置Memcached和Redis缓存,帮助大家更好的理解和学习使用django框架,感兴趣的朋友可以了解下
    2021-04-04
  • 利用Python实现Windows下的鼠标键盘模拟的实例代码

    利用Python实现Windows下的鼠标键盘模拟的实例代码

    本篇文章主要介绍了利用Python实现Windows下的鼠标键盘模拟的实例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • python random模块常用函数基础教程

    python random模块常用函数基础教程

    这篇文章主要为大家介绍了python random模块常用函数基础教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Python 调用C++封装的进一步探索交流

    Python 调用C++封装的进一步探索交流

    这篇文章主要介绍了Python 调用C++封装的进一步探索交流,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Pycharm技巧之代码跳转该如何回退

    Pycharm技巧之代码跳转该如何回退

    用Pycharm写Python代码有一段时间了,最近发现了一个Pycharm的一个小技巧想分享给大家,下面这篇文章主要给大家介绍了关于Pycharm代码跳转该如何回退的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07

最新评论