问题描述

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

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

解决方案

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

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

假设有如下代码需要进行分析(cProfileTest1.py):

#! /usr/bin/env python
#-*- coding:utf-8 -*- def foo():
sum = 0
for i in range(100):
sum += i
return sum if __name__ == "__main__" :
foo()

可以通过以下两种使用方式进行分析:

1、不修改程序

分析程序:

python -m cProfile -o test1.out cProfileTest1.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()"

2、修改程序

加入如下代码:

#! /usr/bin/env python
#-*- coding:utf-8 -*- def foo():
sum = 0
for i in range(100):
sum += i
return sum if __name__ == "__main__" :
import cProfile
cProfile.run("foo()")
exit(0)

运行效果如下:

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 cProfileTest2.py:4(foo)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 0.000 0.000 0.000 0.000 {range}

结果说明:

“”“
ncalls : 函数的被调用次数
tottime :函数总计运行时间,除去函数中调用的函数运行时间
percall :函数运行一次的平均时间,等于tottime/ncalls
cumtime :函数总计运行时间,含调用的函数运行时间
percall :函数运行一次的平均时间,等于cumtime/ncalls
filename:lineno(function) 函数所在的文件名,函数的行号,函数名
”“”

使用memory_profiler分析内存使用情况

需要安装memory_profiler

pip install psutil
pip install memory_profiler

假设有如下代码需要进行分析:

def my_func():
a = [1] * (10*6)
b = [2] * (10*7)
del b
return a

使用memory_profiler是需要修改代码的,这里记录下以下两种使用方式:

1、不导入模块使用

#! /usr/bin/env python
#-*- coding: utf-8 -*- # use : python -m memory_profiler test1.py @profile
def my_func():
a = [1] * (10*6)
b = [2] * (10*7)
del b
return a if __name__ == "__main__" :
my_func()

profile分析:

python -m memory_profiler test1.py

2、导入模块使用

from memory_profiler import profile

@profile
def my_func():
a = [1] * (10*6)
b = [2] * (10*7)
del b
return a

完整代码如下:

直接运行程序即可进行分析。

运行效果如下:

(py27env) [mike@local test]$ python test1.py
Filename: test1.py Line # Mem usage Increment Line Contents
================================================
6 29.5 MiB 0.0 MiB @profile
7 def my_func():
8 29.5 MiB 0.0 MiB a = [1] * (10*6)
9 29.5 MiB 0.0 MiB b = [2] * (10*7)
10 29.5 MiB 0.0 MiB del b
11 29.5 MiB 0.0 MiB return a
												

python 代码性能分析 库的更多相关文章

  1. 使用 profile 进行python代码性能分析

    定位程序性能瓶颈 对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,c ...

  2. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  3. Python, Django 性能分析工具的使用

    最近接手的 Apache HUE 项目性能出现了问题,线上经常出现响应时间过长或因为时间过长而无法服务等问题.老大让我准备弄个性能分析工具,便于追踪和分析平台当前的瓶颈出现在哪里. 那就搞起吧!先从代 ...

  4. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  5. .NET 11 个 Visual Studio 代码性能分析工具

    原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...

  6. 11 个 Visual Studio 代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  7. .NET : 使用代码性能分析工具

    NET : CLR Profiler的使用 经常讲课的时候会提到值类型和引用类型,也会提到如何查看它们的大小.多次被朋友问到,如何真的想要知道到底每个方法分配了多少内存之类的问题,其实这可以通过CLR ...

  8. [转] Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  9. Python代码性能优化技巧

    摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...

随机推荐

  1. 产生大于N的Smith数

    实验三  求Smith数 实验目的: 通过本次实验,掌握穷举算法的基本思想. 实验环境: 硬件:PC机 软件:windows操作系统,C语言 实验内容: 若一个合数的质因数分解式逐位相加之和等于其本身 ...

  2. linux系统查看系统内存和硬盘大小

    1. 查看系统运行内存 free -m free -g(Gb查看) cat /proc/meminfo 2. 查看硬盘大小 df -hl

  3. web程序防止攻击的一些资料——整理

    地址:https://docs.microsoft.com/en-us/previous-versions/aspnet/a2a4yykt(v=vs.100)?redirectedfrom=MSDN ...

  4. C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置

    C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...

  5. 192-0070 Final project proposal

    Final project proposal192-00701 – Summary of your project.It is based on an existing game which is c ...

  6. django-用户浏览记录添加及商品详情页

    视图函数views.py # /goods/商品id class DetailView(View): '''详情页''' def get(self, request, goods_id): '''显示 ...

  7. Basic concepts of docker/kubernete/kata-container

    Kubereters An open-source system for automating deployment, scaling, and management of containerized ...

  8. freemarker使用shiro标签(spring boot)

    freemarker使用shiro标签(spring boot) 2018年07月03日 14:20:37 niu_sayok 阅读数:348更多 个人分类: freeMarkerShiro   首先 ...

  9. LeetCode 988. Smallest String Starting From Leaf

    原题链接在这里:https://leetcode.com/problems/smallest-string-starting-from-leaf/ 题目: Given the root of a bi ...

  10. 14.go内置的rate包学习2(有花操作,必看)

    package main import ( "fmt" "golang.org/x/time/rate" "time" ) func mai ...