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 相关文章推荐
使用pdb模块调试Python程序实例
Jun 02 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
Python中的self用法详解
Aug 06 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
mac在matplotlib中显示中文的操作方法
Mar 06 Python
python argparse模块通过后台传递参数实例
Apr 20 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
Apr 26 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
基于Python爬取素材网站音频文件
Oct 21 Python
Django怎么在admin后台注册数据库表
Nov 14 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自动加载autoload机制示例分享
2014/02/20 PHP
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
2015/12/06 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
Python3.2中Print函数用法实例详解
2015/05/19 Python
python实现RSA加密(解密)算法
2016/02/17 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
django ajax json的实例代码
2018/05/29 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
详解Python绘图Turtle库
2019/10/12 Python
python设置环境变量的作用整理
2020/02/17 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
浅析Python面向对象编程
2020/07/10 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
完美解决Pycharm中matplotlib画图中文乱码问题
2021/01/11 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
高中毕业生自我鉴定范文
2013/09/26 职场文书
材料化学应届生求职信
2013/10/09 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
考试诚信承诺书
2014/05/23 职场文书
计算机网络专业求职信
2014/06/05 职场文书
实验室的标语
2014/06/20 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
婚礼父母答谢词
2015/01/04 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书