学习笔记 —— python代码耗时及内存占用测试方法
创始人
2024-05-18 23:36:03
0

1、手写耗时测试

先看结果;
主要有三种方法,各自的时钟间隔如下:

  1. time.time()
    在这里插入图片描述

  2. timeit
    在这里插入图片描述

  3. time.time_ns() ( time is outputted in ns!).
    在这里插入图片描述

可见方法2,即timeit 的时钟间隔最短。

注:最后一个是以ns为单位的,前两个是以s为单位的

三种方法的时钟测量及调用方式如下:

import numpy as npimport time
from timeit import default_timer as timerdef checktick():M = 200timesfound = np.empty((M,))for i in range(M):# t1 = time.time()  # get timestamp from timer# t2 = time.time()  # get timestamp from timert1 = timer()  # get timestamp from timert2 = timer()  # get timestamp from timer# t1 = time.time_ns() # get timestamp from timer# t2 = time.time_ns()  # get timestamp from timerwhile (t2 - t1) < 1e-16:  # if zero then we are below clock granularity, retake timing# t2 = time.time()  # get timestamp from timert2 = timer() # get timestamp from timer# t2 = time.time_ns()  # get timestamp from timertimesfound[i] = t2  # record the time stamp# minDelta = 1000000Delta = np.diff(timesfound)  # it should be cast to int only when neededminDelta = Delta.min()return minDeltaif __name__ == "__main__":print(f"the Clock Granularity is {checktick()*10e8} nanosecond")# print(f"the Clock Granularity is {checktick()} nanosecond")

np.diff() 函数说明

import time
from functools import wraps# decorator to time
def timefn(fn):@wraps(fn)def measure_time(*args, **kwargs):t1 = time.time()result = fn(*args, **kwargs)t2 = time.time()print(f"@timefn: {fn.__name__} took {t2 - t1} seconds")return resultreturn measure_time@timefn
def calc_something(param1, param2):...add your code...if __name__ == "__main__":calc_something(param1=1000, param2=300)

2、开源工具

与手写相比,还有一些可以详细到每一个函数,甚至每一行代码的耗时的工具。(但会增大一些开销,仅测试使用)

2.1 耗时测试

cProfile

一般是内置的,不用装,直接运行

python -m cProfile -s cumulative JuliaSet.py

在这里插入图片描述

SnakeViz

安装

pip install snakeviz

运行

python -m cProfile -o profile.stats JuliaSet.py
python -m snakeviz profile.stats --server

在这里插入图片描述
在这里插入图片描述

line_profiler

安装

pip install line_profiler

使用

在函数上方添加 “@profile” 标识(这个时候编辑器可能会报错,不用管,反正咱们用的是命令行)
在这里插入图片描述
运行

python -m kernprof -l JuliaSet.py
python -m line_profiler JuliaSet.py.lprof

在这里插入图片描述

2.2 内存占用测试

测试内存的附加耗时比测试时间多的多,可能是10-100倍甚至更多。

memory_profiler

安装

pip install memory_profiler

使用

记得还是带上“@profile”
在这里插入图片描述
运行

python -m memory_profiler JuliaSet.py

在这里插入图片描述

mprof

mprof是memory_profiler内置的可视化工具

运行(这里需要matplotlib)

python -m mprof run JuliaSet.py
python -m mprof plot mprofile_20220116173811.dat

第二句的文件mprofile_20220116173811.dat与第一句的输出保持一致
在这里插入图片描述
在这里插入图片描述

2.3 CPU 占用 --psutil

psutil不止可以看CPU占用,也能看内存占用

pip install psutil

这个怎么用看官方示例吧, 还有文档

针对看CPU占用主要用这个函数:

psutil.cpu_percent(interval=1, percpu=True) 

可以看每个CPU核的占用百分比

相关内容

热门资讯

火山口国家地质公园导游词 火山口国家地质公园导游词  朋友们,相信你一定知道火山,在电视或电影里看过火山爆发的场景,一定会被它...
秦兵马俑导游词 秦兵马俑导游词15篇  作为一名尽职尽责的导游,编写导游词是必不可少的,导游词是我们引导游览时使用的...
晋祠导游词 晋祠导游词  作为一名专门为游客提供帮助的导游,通常需要准备好一份导游词,导游词具有极强的实用性,涉...
昆明大观楼导游词 昆明大观楼导游词  作为一名专门为游客提供帮助的导游,常常要写一份好的导游词,导游词是导游员在游览时...
许昌西湖公园的导游词 许昌西湖公园的导游词  今天,我带领大家来游览位于许昌市中心的西湖公园,希望我们能一起渡过一段快乐的...
刘公岛导游词 刘公岛导游词范文(精选5篇)  作为一名乐于助人的导游,总归要编写导游词,导游词是导游员同游客交流思...
九龙洞风景区导游词贵州导游词 九龙洞风景区导游词贵州导游词  作为一名默默奉献的导游,时常需要编写导游词,导游词一般是根据实际的游...
云南澜沧江导游词 云南澜沧江导游词  澜沧江是湄公河上游在中国境内河段的名称,藏语拉楚,意思为“獐子河”。它也是中国西...
新疆概况旅游导游词 新疆概况旅游导游词范文(精选3篇)  作为一名尽职尽责的导游,有必要进行细致的导游词准备工作,借助导...
颐和园的导游词资料 关于颐和园的导游词资料  导游词是导游人员引导游客观光游览时的讲解词,是导游员同游客交流思想,向游客...
北京导游词 北京导游词(合集15篇)  作为一名优秀的旅游从业人员,时常要开展导游词准备工作,一篇完整的导游词,...
泰山景点介绍导游词 泰山景点介绍导游词(通用5篇)  作为一位不辞辛劳的导游,通常需要准备好一份导游词,导游词可以加深游...
校园导游词 校园导游词  作为一名专门引导游客、助人为乐的导游,就难以避免地要准备导游词,导游词一般是根据实际的...
韩国景点导游词 韩国景点导游词  大家好!  首先,欢迎大家到韩国首尔来旅游,下面就由我给大家介绍一下这个具有东方神...
介绍洛阳的导游词 介绍洛阳的导游词  洛阳位于河南,在那里有许多的特色文化,那么关于介绍洛阳的导游词都有哪些呢?下面是...
桂林聚龙潭导游词 桂林聚龙潭导游词  作为一位无私奉献的导游,时常需要用到导游词,导游词不是以一代百、千篇一律的,它必...
炳灵寺石窟导游词 炳灵寺石窟导游词  作为一名尽职尽责的导游,常常要根据讲解需要编写导游词,导游词是导游人员引导游客观...
西安大雁塔导游词 西安大雁塔导游词500字  游客朋友们:  大家好!  欢迎大家到西安大雁塔观光旅游!  大雁塔位于...
马鞍山森林公园讲解词 马鞍山森林公园讲解词  森林公园的导游词篇一:马鞍山森林公园导游词  大家好!欢迎来到马鞍山森林公园...