首页 > 编程语言 >python时间监测工具line_profiler

python时间监测工具line_profiler

时间:2023-10-24 20:22:19浏览次数:49  
标签:do python profiler stuff numbers Time line

时间监测工具line_profiler

目录

ine_profiler是Python的一个第三方库,其功能时基于函数的逐行代码分析工具。通过该库,可以对目标函数允许分析多个函数)进行时间消耗分析,便于代码调优。

安装

pip install line_profiler

部分注释

Timer unit: 1e-07 s

Total time: 7.13e-05 s
File: d:\Note\lcodeNoteCards\testcode\python\testpy.py
Function: do_stuff at line 4

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     4                                           def do_stuff(numbers):
     5         1         24.0     24.0      3.4      s = sum(numbers)
     6         1        249.0    249.0     34.9      l = [numbers[i]/43 for i in range(len(numbers))]
     7         1        437.0    437.0     61.3      m = ['hello'+str(numbers[i]) for i in range(len(numbers))]
     8         1          3.0      3.0      0.4      return s, l, m
Timer unit:分析表中,Time和Per Hit的数值单位,时间单位固定为秒(s),默认数值单位是1e-6,合在一起便是1e-6s,即微秒。实际某一行的运行时间是Time * Timer unit的值,觉得不好理解的话,下方介绍kernprof命令时有一个示例供各位同学理解,这里只是简单提一下。
Total time:当前函数的时间消耗,单位是秒。
File:当前函数所在文件名。
Function:当前函数的函数名以及在文件中的位置。
Line #:代码所在行号。
Hits:在执行过程中,该行代码执行次数,即命中数。
Time:在执行过程中,该行代码执行的总时间,默认单位是微秒。
Per Hit:在执行过程中,平均每次执行该行代码所耗时间,默认单位是微秒。
% Time:执行该行代码所耗总时间占执行当前函数所耗总时间的百分比。
Line Contents:该行代码的内容。

使用方法

# line_profiler_test.py
from line_profiler import LineProfiler
import numpy as np
 
@profile
def test_profiler():
    for i in range(100):
        a = np.random.randn(100)
        b = np.random.randn(1000)
        c = np.random.randn(10000)
    return None
 
if __name__ == '__main__':
    test_profiler()
    
kernprof -v -l  "d:\Note\lcodeNoteCards\testcode\python\testpy.py" 

Wrote profile results to testpy.py.lprof
Timer unit: 1e-06 s

Total time: 0.0209844 s
File: d:\Note\lcodeNoteCards\testcode\python\testpy.py
Function: test_profiler at line 5

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     5                                           @profile
     6                                           def test_profiler():
     7       101         25.8      0.3      0.1      for i in range(100):
     8       100        362.6      3.6      1.7          a = np.random.randn(100)
     9       100       1998.9     20.0      9.5          b = np.random.randn(1000)
    10       100      18596.8    186.0     88.6          c = np.random.randn(10000)
    11         1          0.3      0.3      0.0      return None

同时显示内部函数

from line_profiler import LineProfiler
import random
 
def do_other_stuff(numbers):
    s = sum(numbers)
 
def do_stuff(numbers):
    do_other_stuff(numbers)
    l = [numbers[i]/43 for i in range(len(numbers))]
    m = ['hello'+str(numbers[i]) for i in range(len(numbers))]
 
numbers = [random.randint(1,100) for i in range(1000)]
lp = LineProfiler()
lp.add_function(do_other_stuff)   # add additional function to profile
lp_wrapper = lp(do_stuff)
lp_wrapper(numbers)
lp.print_stats()
Timer unit: 1e-07 s

Total time: 7e-06 s
File: d:\Note\lcodeNoteCards\testcode\python\testpy.py
Function: do_other_stuff at line 4

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     4                                           def do_other_stuff(numbers):
     5         1         70.0     70.0    100.0      s = sum(numbers)

Total time: 0.0006311 s
File: d:\Note\lcodeNoteCards\testcode\python\testpy.py
Function: do_stuff at line 7

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
     7                                           def do_stuff(numbers):
     8         1        104.0    104.0      1.6      do_other_stuff(numbers)
     9         1       2064.0   2064.0     32.7      l = [numbers[i]/43 for i in range(len(numbers))]
    10         1       4143.0   4143.0     65.6      m = ['hello'+str(numbers[i]) for i in range(len(numbers))]

参考资料

https://blog.csdn.net/weixin_42245157/article/details/125415104

标签:do,python,profiler,stuff,numbers,Time,line
From: https://www.cnblogs.com/tian777/p/17785674.html

相关文章

  • python基础语法指南
    输出流输出百分号(1)直接使用参数格式化:{:.2%}{:.2%}:显示小数点后2位print('percent:{:.2%}'.format(42/50))percent:84.00%不显示小数位:{:.0%},即,将2改为0print('percent:{:.0%}'.format(42/50))percent:84%(2)格式化为float,然后处理成%格式:{:.2f}%需要对42/50乘......
  • 【Python】【ChatGPT】本地部署ChatGPT学习记录
    学习一下GPT项目的相关使用和部署 一、GPT4ALL模型Github:https://github.com/nomic-ai/gpt4allGPT4ALL项目部署简易,但是在运行体验上一般,并且是只调用CPU来进行运算,看官方文档介绍在嵌入式上有比较大的优势,但是目前个人对嵌入式方向接触不深,仅在本机部署使用。本机配置(CPU:i5......
  • 【Python 千题 —— 基础篇】进制转换:十进制转二进制
    题目描述题目描述计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。输入描述输入一个十进制数。输出描述程序将输入的十进制数转换为二进制数,并输出其二进制形式。示例示例......
  • 21.4 Python 使用GeoIP2地图定位
    GeoIP2是一种IP地址定位库,它允许开发人员根据IP地址查找有关位置和地理位置的信息。它使用MaxMind公司的IP地址数据库,并提供一个方便的PythonAPI。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬......
  • Qt CustomDashLine会对范围外Path自动裁剪问题
    在使用QPainter进行绘制时发现问题。当直接使用QPen进行绘制自定义虚线时会出现一个问题:当绘制的Path遇到界面进行裁剪时,此时虚线线型将会省略裁剪的那一部分,导致自定义虚线在移动以及放大时会自动修改位置。解决办法:直接使用QPainterPathSkroke。问题描述......
  • 基于Python的子进程获取键盘输入
    一概念 众所周知,python中的获取键盘输入,input函数是没办法用在子程序的,这就限制了它的用途。想要在子程序中获取键盘输入。唯有fn=sys.stdin.fileno函数了。二实例解析在主进程中敲写代码fn=sys.stdin.fileno(),然后将获取到的文件描述符fn传入子进程,子进程敲写代码sys......
  • python selenium 利用pyautogui+ActionChains 完美解决我的滑块验证登录问题
    在解决滑块验证的时候不知道什么原因明明是滑块已经对上了,代码执行就是会校验不通过,手动时就可以,中间也做利用ActionChains模块减速滑动轨迹的操作,但仍然不行,后面在执行代码中添加了pyautogui模块使鼠标悬停在屏幕中的某个点而不改变ActionChains鼠标的定位后终于每次都能通过了fro......
  • 21.4 Python 使用GeoIP2地图定位
    GeoIP2是一种IP地址定位库,它允许开发人员根据IP地址查找有关位置和地理位置的信息。它使用MaxMind公司的IP地址数据库,并提供一个方便的PythonAPI。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬......
  • Python数据类型
     数据类型有数值型,布尔型和字符串型一、数值型包括int(整型)、float(浮点型)和complex(复数型)等。1.整型Python3.x支持任意大小的整型数。整型数可以表示成十进制、八进制、十六进制和二进制形式。十进制整型常量:数码为0~9,如-135、57232。八进制整型常量:必须以80或8o开头(第1......
  • python引用相对路径
    文件夹ants/bees文件夹与learn_data.py隶属于同一个目录data_process   所以引用相对路径的方式即为:classMyData(Dataset):def__init__(self,root_dir,label_dir):self.root_dir=root_dir#根目录,即hymenoptera_data/trainself.label_......