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


Posted in Python onMarch 12, 2020

多线程适合于多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 相关文章推荐
Python虚拟环境项目实例
Nov 20 Python
详解Python之unittest单元测试代码
Jan 24 Python
详解Appium+Python之生成html测试报告
Jan 04 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
Python自定义一个异常类的方法
Jun 27 Python
python多继承(钻石继承)问题和解决方法简单示例
Oct 21 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
OpenCV灰度化之后图片为绿色的解决
Dec 01 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 Python
Python测试框架pytest高阶用法全面详解
Jun 01 Python
Python线程协作threading.Condition实现过程解析
Mar 12 #Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 #Python
Python基于read(size)方法读取超大文件
Mar 12 #Python
Python函数生成器原理及使用详解
Mar 12 #Python
python deque模块简单使用代码实例
Mar 12 #Python
python中安装django模块的方法
Mar 12 #Python
python3 sorted 如何实现自定义排序标准
Mar 12 #Python
You might like
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
老生常谈PHP中的数据结构:DS扩展
2017/07/17 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
JavaScript中的单引号和双引号报错的解决方法
2014/09/01 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JavaScript实现打字效果的方法
2015/07/10 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
python复制文件代码实现
2013/12/23 Python
python安装pil库方法及代码
2019/06/25 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
实习护理工作自我评价
2013/09/25 职场文书
学校运动会报道稿
2014/09/23 职场文书
小学生交通安全寄语
2015/02/27 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript