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实现电子词典
Apr 23 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
详解Python中的strftime()方法的使用
May 22 Python
对Python中的@classmethod用法详解
Apr 21 Python
python实现读Excel写入.txt的方法
Apr 29 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
使用Python生成200个激活码的实现方法
Nov 22 Python
python中利用matplotlib读取灰度图的例子
Dec 07 Python
python 消费 kafka 数据教程
Dec 21 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
python利用线程实现多任务
Sep 18 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 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中对数据库操作的封装
2006/10/09 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PDO::getAttribute讲解
2019/01/28 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
python内存管理分析
2015/04/08 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
keras获得某一层或者某层权重的输出实例
2020/01/24 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
django正续或者倒序查库实例
2020/05/19 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
实习生自我鉴定
2013/12/12 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
初中班主任评语大全
2014/04/24 职场文书
大学生交通专业求职信
2014/09/01 职场文书
学生顶撞老师的检讨书
2014/09/17 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
学生通报表扬范文
2015/05/04 职场文书
员工旷工检讨书
2015/08/15 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang