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实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
python如何通过protobuf实现rpc
Mar 06 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python代码太长换行的实现
Jul 05 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
python如何将两个txt文件内容合并
Oct 18 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
Jan 09 Python
python Shapely使用指南详解
Feb 18 Python
如何用Django处理gzip数据流
Jan 29 Python
Django项目如何正确配置日志(logging)
Apr 29 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封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
python计算二维矩形IOU实例
2020/01/18 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
python基于openpyxl生成excel文件
2020/12/23 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
小学教师培训感言
2014/02/11 职场文书
主题班会演讲稿
2014/05/22 职场文书
单位租房协议书范本
2014/12/04 职场文书
五年级上册复习计划
2015/01/19 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android