掌握Python系统管理-调试和分析脚本2- cProfile和timeit
调试和分析在Python开发中发挥着重要作用。 调试器可帮助程序员分析完整的代码。 调试器设置断点,而剖析器运行我们的代码,并给我们执行时间的详细信息。 分析器将识别程序中的瓶颈。我们将了解pdb Python调试器,cProfile模块和timeit模块来计算Python代码的执行时间。
涉及内容:
- Python调试技术
- 错误处理(异常处理)
- 调试工具
- 调试基本程序崩溃
- 分析和计时程序
- 使程序运行得更快
跟踪程序
trace_example.py
class Student:
def __init__(self, std):
self.count = std def go(self):
for i in range(self.count):
print(i)
return
if __name__ == '__main__':
Student(5).go()
执行:
$ python3 -m trace --trace trace_example.py
--- modulename: trace_example, funcname: <module>
trace_example.py(1): class Student:
--- modulename: trace_example, funcname: Student
trace_example.py(1): class Student:
trace_example.py(2): def __init__(self, std):
trace_example.py(5): def go(self):
trace_example.py(9): if __name__ == '__main__':
trace_example.py(10): Student(5).go()
--- modulename: trace_example, funcname: __init__
trace_example.py(3): self.count = std
--- modulename: trace_example, funcname: go
trace_example.py(6): for i in range(self.count):
trace_example.py(7): print(i)
0
trace_example.py(6): for i in range(self.count):
trace_example.py(7): print(i)
1
trace_example.py(6): for i in range(self.count):
trace_example.py(7): print(i)
2
trace_example.py(6): for i in range(self.count):
trace_example.py(7): print(i)
3
trace_example.py(6): for i in range(self.count):
trace_example.py(7): print(i)
4
trace_example.py(6): for i in range(self.count):
trace_example.py(8): return
--- modulename: trace, funcname: _unsettrace
trace.py(77): sys.settrace(None)
参考资料
Q群内免费获取887934385
分析和计时程序
分析Python程序意味着测量程序的执行时间。它衡量每个功能所花费的时间。 Python的cProfile模块用于分析Python程序。
cProfile模块
如前所述,分析意味着测量程序的执行时间。我们将使用cProfile Python模块来分析程序。
现在,我们将编写一个cprof_example.py脚本并在其中编写以下代码:
mul_value = 0 def mul_numbers( num1, num2 ):
mul_value = num1 * num2;
print ("Local Value: ", mul_value)
return mul_value mul_numbers( 58, 77 )
print ("Global Value: ", mul_value)
执行:
$ python3 -m cProfile cprof_example.py
Local Value: 4466
Global Value: 0
6 function calls in 0.000 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 cprof_example.py:1(<module>)
1 0.000 0.000 0.000 0.000 cprof_example.py:3(mul_numbers)
1 0.000 0.000 0.000 0.000 {built-in method builtins.exec}
2 0.000 0.000 0.000 0.000 {built-in method builtins.print}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
- ncalls:调用次数
- tottime:函数花费的总时间
- percall:tottime/ncalls
- cumtime:函数及其子函数中花费的累计时间
- percall:cumtime/primitive calls
filename:lineno(function):函数信息
使用timeit,我们可以决定我们想要测量哪些代码的性能。因此,我们可以轻松定义设置代码以及我们要单独执行测试的代码段。主代码运行100万次,这是默认时间,而设置代码只运行一次。
import timeit prg_setup = "from math import sqrt"
prg_code = '''
def timeit_example():
list1 = []
for x in range(50):
list1.append(sqrt(x))
'''
# timeit statement
print(timeit.timeit(setup = prg_setup, stmt = prg_code, number = 10000))
执行:
$ python timeit_example.py
0.00180888175964
使程序运行得更快
有多种方法可以使Python程序运行得更快,如下所示:
- Profile代码,以便识别瓶颈
- 使用内置函数和库,因此解释器不需要执行循环
- 避免使用全局变量,因为Python在访问全局变量时非常慢
- 使用已有包
小结
在本章中,我们了解了调试和分析程序的重要性。我们了解了可用于调试的不同技术。
我们了解了pdb Python调试器以及如何处理异常。我们在分析和计时脚本时学习了如何使用Python的cProfile和timeit模块。我们还学习了如何使脚本运行得更快。
掌握Python系统管理-调试和分析脚本2- cProfile和timeit的更多相关文章
- 自制基于python的DoU log分析脚本
工作中测试DoU的log需要分析,原先是使用excel,去ctrl c,ctrl v截取数据,整理格式等等.一来,这工作虽然很简单,但是非常耗时,不熟练的人(比如我)一搞搞个半天:二来,不小心还会出现 ...
- python编写网络抓包分析脚本
python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...
- eos源码分析和应用(一)调试环境搭建
转载自 http://www.limerence2017.com/2018/09/02/eos1/#more eos基于区块链技术实现的开源引擎,开发人员可以基于该引擎开发DAPP(分布式应用).下面 ...
- 【转载】Python 代码调试技巧
https://www.ibm.com/developerworks/cn/linux/l-cn-pythondebugger/ Python 代码调试技巧 张 颖2012 年 5 月 03 日发布 ...
- Python Telnet弱口令爆破脚本及遇到的错误与问题
写得时候遇到了一个很大的问题,就是我在发送用户名,接受用户名就会一直卡住.然后等了好久后提示 recv ‘\r\nSession timed out.\r\n\r\nTelnet Server has ...
- Python、Lua和Ruby——脚本大P.K.
转自Python.Lua和Ruby--脚本大P.K. Python versus Lua Versus Ruby Python.Lua和Ruby--脚本大P.K. Tom Gutschmidt 著 赖 ...
- BASE64编码原理分析脚本实现及逆向案例
在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理你又了解多少?今天小编带大家了解一下Base64编码原理分析脚本实现及逆向案例的相关内容. 01编码由来 数 ...
- day31 堡垒机尾声 + Python与金融量化分析(一)
堡垒机尾声: 代码案例:https://github.com/liyongsan/git_class/tree/master/day31 课堂笔记:file send: 1.选择本地文件 2.远程路径 ...
- 调试 ASP 程序脚本
调试 ASP 脚本 无论您的计划多么精密.经验多么丰富,脚本错误 (bug) 可能在最初就使您的 ASP 服务器端的脚本无法正确运行.也就是说调试,即查找和纠正脚本错误,对开发一个成功的和强健的 AS ...
随机推荐
- PHPStorm 10 配置PHPUnit
PHPStorm 10 配置PHPUnit PHPUnit的安装 自己用的是Xampp,PHPUnit好像自带不好用. 不说废话: 自己看 According to official site htt ...
- vue 列表的排序过渡 shuffle遇到的问题
内部的实现,Vue 使用了一个叫 FLIP 简单的动画队列使用 transforms 将元素从之前的位置平滑过渡新的位置 需要注意的是使用 FLIP 过渡的元素不能设置为 display: inlin ...
- Linux Cannot allocate memory问题
查找了一下相关文档,发现这个错误的含义其实就是像它自己说的,没法分配内存了. The problem is inherent with the way Java allocates memory wh ...
- 为什么磁盘慢会导致Linux负载飙升?
一.CPU利用率和负载率的区别 这里要区别CPU负载和CPU利用率,它们是不同的两个概念,但它们的信息可以在同一个top命令中进行显示.CPU利用率显示的是程序在运行期间实时占用的CPU百分比,这是对 ...
- API gateway 之 kong 基本操作 (三)
一.演示环境准备 1.nginx配置 [root@nginx conf.d]# pwd /etc/nginx/conf.d [root@nginx conf.d]# ls conf_bak kong_ ...
- Wininet-Post
#include "stdafx.h"#include <Windows.h>#include <wininet.h>#include <iostre ...
- C++学习笔记10_输入输出流.文件读写
//从键盘输入到程序,叫标准input:从程序输出到显示器,叫标准output:一并叫标准I/O //文件的输入和输出,叫文件I/O cout<<"hellow word&quo ...
- wpf使用技巧
1.设置资源 <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries ...
- 学习笔记31_ORM框架ModelFirst设计数据库
ModelFirst就是先设计实体数据类型,然后根据设计的数据类型,生成数据库表 1.新建项--ADO.NET实体数据模型--空数据模型--进入模型设计器(点击xxx.edmx文件也能进入设计器). ...
- Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Web 版 VS Code、Azure 账号等
北京时间 2019 年 11 月 4 日,在 Microsoft Ignite 2019 大会上,微软正式发布了 Visual Studio Online 公开预览版!发布之后,开发者们都为之振奋.同 ...