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实现封装得到virustotal扫描结果
Oct 05 Python
python如何查看系统网络流量的信息
Sep 12 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
python中import与from方法总结(推荐)
Mar 21 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
Python终端输出彩色字符方法详解
Feb 11 Python
python使用PIL剪切和拼接图片
Mar 23 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
python opencv实现图像边缘检测
2019/04/29 Python
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
机械专业应届生求职信
2013/09/21 职场文书
商务英语专业应届毕业生求职信
2013/10/28 职场文书
外贸采购员求职的自我评价
2013/11/26 职场文书
党员思想汇报范文
2013/12/30 职场文书
表演方阵解说词
2014/02/08 职场文书
2014年两会学习心得体会
2014/03/17 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
新郎新娘答谢词
2015/01/04 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
大国崛起英国观后感
2015/06/02 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python