资讯专栏INFORMATION COLUMN

Python & IPython Notebook 代码计时与简单的性能分析

betacat / 1050人阅读

摘要:本文记录一些用于代码计时和简单性能分析的工具。也就是这个魔法命令把中剩余的代码作为输入变量,对其进行计时。该命令会运行最后一个参数指定的代码,然后在运行时分析所有需要分析的函数。该命令运行之后会打印一个逐行分析报告。

本文记录一些用于 Python 代码计时和简单性能分析的工具。强烈推荐后两种工具。

begin & end 手动计时

Matlab 里有一对 tic toc 命令,使用格式如下:

tic
% do anything
toc

之后会打印中间的代码执行时间。这种风格对于简单的计时还是挺好用的。遗憾的是 Python 中没有类似的特别方便的模块,只能用类似于下面的代码进行模仿:

from time import time

begin = time()
# do anything
end = time()
print(end - begin)
timeit 模块

timeit 模块用起来特别不方便:

from timeit import timeit

timeit(stmt="code to run", setup="init code", number=1000000)

后来逐渐发现这个模块是设计在 Shell 命令行模式下使用的,而不是在 IPython notebook 模式下使用的。因此这里不多介绍,需要在 Shell 命令行下计时时可以查阅其 Shell 模式下的使用方法。

IPython Notebook %%time

使用 IPython Notebook 时,最简单的代码计时应该是 %%time 魔法命令(magic command, I am a Zhong 2)

%%time
# code to run...

注意,"%%" 开头的魔法命令必须写在一个 cell 的第一行,并且通常以 cell 中剩余的内容作为输入变量。也就是这个魔法命令把 cell 中剩余的代码作为输入变量,对其进行计时。

line_profiler

line_profiler 是一个强大的代码逐行时间或者空间开销分析工具,笔者通常用于代码逐行运行时间分析,从而定位到用时最多的代码,并且能得到每行代码耗时百分比。定位到代码热点之后可以对热点进行优化,从而以最小的改动而最大程度上提升代码效率。本文仅介绍笔者常用的一种方式。

使用前需要安装:

conda install line_profiler
# or
pip install line_profiler

在 Notebook 中使用,需要运行

%load_ext line_profiler

使用 line_profiler 进行时间分析时,需要指定分析的函数,该工具只会对这个函数中的代码进行逐行分析。比如对函数 hello 和函数 hi 进行逐行分析,在 Notebook 中命令为

%lprun -f hello -f hi hello()

-f 参数表明接下来要指定一个函数名进行分析,最后一个参数则是要运行的代码。该命令会运行最后一个参数指定的代码,然后在运行时分析所有需要分析的函数。该命令运行之后会打印一个逐行分析报告。

更详细的使用方法参考 如何进行 Python性能分析,你才能如鱼得水?,easy profile python in jupyter 以及这些模块的帮助文档和官方文档。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44412.html

相关文章

  • Jupyter Notebook之初识及入门

    摘要:所以,应该直接了当的安装,其中也会自动安装上,作为其运行的。这只是一开始,之后还有里各种找不到外部安装的的情况。终于,意识到这些方法都是错误的思路。这才知道原来是无法识别。 为什么要用IPython/Jupyter? python里面调试确实有点烦恼,尤其是在vim里,想要尝试一些简单的编码问题,实在是有点麻烦,不想到命令行模式一行一行执行,也不想再新建一个文件测试一个简单的功能。 而...

    plus2047 评论0 收藏0
  • Jupyter Notebook之初识及入门

    摘要:所以,应该直接了当的安装,其中也会自动安装上,作为其运行的。这只是一开始,之后还有里各种找不到外部安装的的情况。终于,意识到这些方法都是错误的思路。这才知道原来是无法识别。 为什么要用IPython/Jupyter? python里面调试确实有点烦恼,尤其是在vim里,想要尝试一些简单的编码问题,实在是有点麻烦,不想到命令行模式一行一行执行,也不想再新建一个文件测试一个简单的功能。 而...

    fredshare 评论0 收藏0
  • Jupyter Notebook之初识及入门

    摘要:所以,应该直接了当的安装,其中也会自动安装上,作为其运行的。这只是一开始,之后还有里各种找不到外部安装的的情况。终于,意识到这些方法都是错误的思路。这才知道原来是无法识别。 为什么要用IPython/Jupyter? python里面调试确实有点烦恼,尤其是在vim里,想要尝试一些简单的编码问题,实在是有点麻烦,不想到命令行模式一行一行执行,也不想再新建一个文件测试一个简单的功能。 而...

    Hancock_Xu 评论0 收藏0
  • 装扮你Jupyter

    摘要:显示中文此外,单独拎出来的另一个原因是,还有一个中文显示的问题。首先我们来看可以使用的字体你应该看到下面这样的表格然后找到支持中文的字体名,然后设置的默认字体当然,你可以添加到刚才的配置中,或者采用这个博客的方法。 又到摆脱重复工作,换个心情,然而并没有软用的时间了。这次,教大家如何搭建一个好看的jupyter环境。 安装Jupyter 先来展示一下我的环境 python: 3.5....

    leo108 评论0 收藏0
  • CentOS7 install spark+ipython-nodebook

    摘要:使用浏览器作为界面,向后台的服务器发送请求,并显示结果。本文主要介绍在上安装流程该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。 ipython-nodebook IPython notebook 目前已经成为用 Python 做教学、计算、科研的一个重要工具。 IPython Notebook 使用浏览器作为界面,向后台的 IPython ...

    soasme 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<