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脚本快速为iOS10生成图标和截屏
Sep 22 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
Python import与from import使用及区别介绍
Sep 06 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
python中selenium操作下拉滚动条的几种方法汇总
Jul 14 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
pytorch方法测试——激活函数(ReLU)详解
Jan 15 Python
python获取系统内存占用信息的实例方法
Jul 17 Python
Python selenium如何打包静态网页并下载
Aug 12 Python
解决python 输出到csv 出现多空行的情况
Mar 24 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 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
php 模拟POST|GET操作实现代码
2010/07/20 PHP
php实现读取超大文件的方法
2014/07/28 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
iframe实用操作锦集
2014/04/22 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
JS正则子匹配实例分析
2016/12/22 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
Vue实现仿iPhone悬浮球的示例代码
2020/03/13 Javascript
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python面向对象程序设计示例小结
2019/01/30 Python
Python解析json代码实例解析
2019/11/25 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
大学生学习2014全国两会心得体会
2014/03/13 职场文书
新春联欢会主持词
2014/03/24 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
2016年员工年度考核评语
2015/12/02 职场文书
撤回我也能看到!教你用Python制作微信防撤回脚本
2021/06/11 Python
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js