问题描述

1、Python开发的程序在使用过程中很慢,想确定下是哪段代码比较慢;

2、Python开发的程序在使用过程中占用内存很大,想确定下是哪段代码引起的;

解决方案

使用profile分析分析cpu使用情况

可以使用profile和cProfile对python程序进行分析,这里主要记录下cProfile的使用,profile参考cProfile即可。

#slots_test.py

classFoobar(object):__slots__=('x')def __init__(self, x):

self.x=xdefmain():

f= [Foobar(42) for i in range(1000000)]if __name__ == "__main__":

main()

1.简单查看

python -m cProfile slots_test.py

2.不修改程序

python -m cProfile -o test1.out slots_test.py

python -c "import pstats; p=pstats.Stats('test1.out'); p.print_stats()"

查看排序后的结果:

python -c "import pstats; p=pstats.Stats('test1.out'); p.sort_stats('time').print_stats()"

结果说明

ncalls : 函数的被调用次数

tottime :函数总计运行时间,除去函数中调用的函数运行时间

percall :函数运行一次的平均时间,等于tottime/ncalls

cumtime :函数总计运行时间,含调用的函数运行时间

percall :函数运行一次的平均时间,等于cumtime/ncalls

filename:lineno(function) 函数所在的文件名,函数的行号,函数名

使用memory_profiler分析内存使用情况

需要安装memory_profiler :

pip installpsutil

pipinstall memory_profiler

1.不导入模块

python -m memory_profiler slots_test.py

不加 -m memory_profiler会报错

2.导入模块

#slots_test.py

from memory_profiler importprofileclassFoobar(object):__slots__=('x')def __init__(self, x):

self.x=x

@profiledefmain():

f= [Foobar(42) for i in range(1000000)]if __name__ == "__main__":

main()

python slots_test.py

python查看函数消耗的内存_如何查看内存占用和运行速度相关推荐

  1. linux查看内存_嵌入式操作系统的内存,你了解多少?

    关注.星标公众号,不错过精彩内容 来源:EDN电子技术设计 linux 内存是后台开发人员,需要深入了解的计算机资源.合理的使用内存,有助于提升机器的性能和稳定性.本文主要介绍 linux 内存组织结 ...

  2. python内置函数源码_如何查看python内置函数源码

    在用Python进行各种分析的时候,我们会用到各种各样的函数,比如,我们用SQL时,经常使用join.max等各种函数,那么想看Python是否有这个函数,这个时候可能大部分人会百度,那么如何不使用百 ...

  3. python中函数的可变参数_简单谈谈Python中函数的可变参数

    前言 在Python中定义函数,可以用必选参数.默认参数.可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数和关键字参数. ...

  4. python怎么看安装到哪_怎么查看python的安装路径

    摘要 腾兴网为您分享:怎么查看python的安装路径,小米音乐,图乐,腾讯新闻,淑女网等软件知识,以及dnf雪人套补丁,txt全本小说书城,刷赞平台,noiseware,郑州公务员网络培训学院,微博评 ...

  5. java代码耗尽内存_有关Java内存溢出及内存消耗的小知识

    内存溢出原理: 我们知道,Java程序本身是不能直接在计算机上运行的,它需要依赖于硬件基础之上的操作系统和JVM(Java虚拟机). Java程序启动时JVM都会分配一个初始内存和最大内存给这个应用程 ...

  6. 怎么查看mysql帮助文档_高效查看MySQL帮助文档的方法

    在mysql的使用过程中, 可能经常会遇到以下问题: 某个操作语法忘记了, 如何快速查找? 如何快速知道当前版本上某个字段类型的取值范围? 当前版本都支持哪些函数?希望有例子说明.. 当前版本是否支持 ...

  7. mysql数据库映射到内存_基于共享内存的数据库映射

    基于共享内存的数据库映射 概述 随着各类行业软件对性能追求越来越高,因此对数据库处理的速度提出了新的挑战.然而大部分复杂的业务处理往往依赖体量较大的关系数据(如:Oracle,Mysql,Postgr ...

  8. nginx内存池大小快内存_使用直接内存时可以更快

    nginx内存池大小快内存 总览 使用直接内存不能保证提高性能. 考虑到它增加了复杂性,除非有充分的理由使用它,否则应避免使用它. 塞尔吉奥·奥利维拉(Sergio Oliveira Jr)的这篇出色 ...

  9. showdialog 尝试读取或写入受保护的内存_超频内存比超频CPU收益更大!影驰HOF OC Lab皑钻DDR4-4400评测...

    一.前言:名人堂超频实验室打造HOF OC Lab皑钻 最高可达5000MHz 超频对于DIY而言意味着什么呢?或许你可以说,DIY究极的追究就是极限的超频!早在2013年,影驰就创立了全球首家专业的 ...

  10. java final 内存_聊聊 Java 内存模型

    原标题:聊聊 Java 内存模型 *作者:青芒@有赞 本文目录 Java内存模型 重排序 内存屏障 volatitle的内存语义 final的内存语义 一.Java内存模型 硬件处理 电脑硬件,我们知 ...

最新文章

  1. STM32为何能在众多单片机中脱颖而出?
  2. 国际计算机思维比赛,少儿编程领域中,你所不知道的国际计算思维大赛
  3. Vivado2015.4使用教程(一个完成工程的建立)
  4. github项目怎么运行_利用 GitHub 从零开始搭建一个博客
  5. 让企业零成本拥有自己独立的企业网站不再是问题...
  6. 第三章 阴阳的工作机制(1)
  7. 解决安卓SDK无法下载Package的问题
  8. Laravel源码解析之Eloquent Model
  9. Laravel源码解析之Request
  10. 程序员:下一次面试前你需要准备的五个基本步骤
  11. Java开源内容管理CMS系统J4CMS集成到JTM
  12. 如果面试官问您还有什么问题要问的,应该如何巧妙的回答才算合适呢?
  13. Mob免费短信验证教程
  14. linux看oracle数据库实例,oracle数据库实例的创建[linux]
  15. Visual Studio快捷键大全
  16. Codewars笔记
  17. krpano使用示例
  18. php密钥,php – 唯一的密钥生成
  19. 【Codecs系列】GDR(Gradual Decoder Refresh)帧
  20. php怎么安装ecshop,ECSHOP4.0安装教程【ECSHOP4.0安装流程方法】ECSHOP4.0安装步骤-ECSHOP教程网...

热门文章

  1. 抖音扫码获取cookie带倒计时刷新(PHP+ajax)
  2. 百度地图API与高德地图API
  3. 沁恒CH582M开发板--点亮LED
  4. 苹果应用开发经验总结
  5. linux杀死进程的五种方法
  6. Java String转Map
  7. Linux date时间转换操作
  8. java工具类——字符串拼接,逗号分隔
  9. redis池--JedisPool
  10. CSS 文本一行两端对齐无效解决方案