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 相关文章推荐
仅用50行Python代码实现一个简单的代理服务器
Apr 08 Python
python生成随机密码或随机字符串的方法
Jul 03 Python
Python pass详细介绍及实例代码
Nov 24 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
python3实现逐字输出的方法
Jan 23 Python
Python检查ping终端的方法
Jan 26 Python
OpenCV图像颜色反转算法详解
May 13 Python
python实现翻转棋游戏(othello)
Jul 29 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
python有几个版本
Jun 17 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python实现异步IO的示例
Nov 05 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
多重?l件?合查?(二)
2006/10/09 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
解析php中const与define的应用区别
2013/06/18 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
js实现日历的简单算法
2017/01/24 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Python3 适合初学者学习的银行账户登录系统实例
2017/08/08 Python
python如何重载模块实例解析
2018/01/25 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python合并同类型excel表格的方法
2018/04/01 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
Python给图像添加噪声具体操作
2019/03/03 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python用requests实现http请求代码实例
2019/10/31 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
美国家居装饰店:Pier 1
2019/09/04 全球购物
绿化先进工作者事迹材料
2014/01/30 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
政协委员个人总结
2015/03/03 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle