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 相关文章推荐
使用Pyrex来扩展和加速Python程序的教程
Apr 13 Python
python实现颜色空间转换程序(Tkinter)
Dec 31 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
python中requests和https使用简单示例
Jan 18 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
Pyqt5实现英文学习词典
Jun 24 Python
在cmd中查看python的安装路径方法
Jul 03 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
Python3 assert断言实现原理解析
Mar 02 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
PyCharm Community安装与配置的详细教程
Nov 24 Python
python控制台打印log输出重复的解决方法
May 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使用curl打开https网站的方法
2015/06/17 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
Safari5中alert的无限循环BUG
2011/04/07 Javascript
各情景下元素宽高的获取实现代码
2011/09/13 Javascript
javascript数组的使用
2013/03/28 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
JQuery validate插件Remote用法大全
2016/05/15 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
Promise扫盲贴
2019/06/24 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
Python 闭包的使用方法
2017/09/07 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
数字漫画:comiXology
2020/06/13 全球购物
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
python析构函数用法及注意事项
2021/06/22 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python