- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我尝试使用 line_profiler 模块来获取 Python 文件的逐行配置文件。这是我到目前为止所做的:
1) 从 pypi 安装 line_profiler通过使用 .exe 文件(我在 WinXP 和 Win7 上)。只需点击安装向导即可。
2) 编写一小段代码(类似于在另一个已回答的问题 here 中提出的问题)。
from line_profiler import LineProfiler
def do_stuff(numbers):
print numbers
numbers = 2
profile = LineProfiler(do_stuff(numbers))
profile.print_stats()
3) 从 IDLE/PyScripter 运行代码。我只有时间。
Timer unit: 4.17188e-10 s
如何获得我执行的代码的完整的逐行配置文件?我从未使用过任何高级 Python 功能,如装饰器,所以我很难理解如何使用几篇文章提供的指南,如 here和 here .
最佳答案
此答案是我的答案 here 的副本了解如何从 Python 脚本中获取 line_profiler
统计信息(无需从命令行使用 kernprof
或必须将 @profile
装饰器添加到函数和类方法)。类似 line_profiler
问题的所有答案(我见过)仅使用 kernprof
进行描述。
line_profiler
测试用例(在 GitHub 上找到)有一个示例,说明如何从 Python 脚本中生成配置文件数据。您必须包装要分析的函数,然后调用包装器传递任何所需的函数参数。
from line_profiler import LineProfiler
import random
def do_stuff(numbers):
s = sum(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_wrapper = lp(do_stuff)
lp_wrapper(numbers)
lp.print_stats()
输出:
Timer unit: 1e-06 s
Total time: 0.000649 s
File: <ipython-input-2-2e060b054fea>
Function: do_stuff at line 4
Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 def do_stuff(numbers):
5 1 10 10.0 1.5 s = sum(numbers)
6 1 186 186.0 28.7 l = [numbers[i]/43 for i in range(len(numbers))]
7 1 453 453.0 69.8 m = ['hello'+str(numbers[i]) for i in range(len(numbers))]
向配置文件添加附加功能
此外,您还可以添加要分析的其他功能。例如,如果您有第二个 calling 函数并且您只包装了 calling 函数,您将只能看到 calling 的配置文件结果功能。
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_wrapper = lp(do_stuff)
lp_wrapper(numbers)
lp.print_stats()
以上只会为调用函数产生以下配置文件输出:
Timer unit: 1e-06 s
Total time: 0.000773 s
File: <ipython-input-3-ec0394d0a501>
Function: do_stuff at line 7
Line # Hits Time Per Hit % Time Line Contents
==============================================================
7 def do_stuff(numbers):
8 1 11 11.0 1.4 do_other_stuff(numbers)
9 1 236 236.0 30.5 l = [numbers[i]/43 for i in range(len(numbers))]
10 1 526 526.0 68.0 m = ['hello'+str(numbers[i]) for i in range(len(numbers))]
在这种情况下,您可以像这样将附加的 调用 函数添加到配置文件中:
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-06 s
Total time: 9e-06 s
File: <ipython-input-4-dae73707787c>
Function: do_other_stuff at line 4
Line # Hits Time Per Hit % Time Line Contents
==============================================================
4 def do_other_stuff(numbers):
5 1 9 9.0 100.0 s = sum(numbers)
Total time: 0.000694 s
File: <ipython-input-4-dae73707787c>
Function: do_stuff at line 7
Line # Hits Time Per Hit % Time Line Contents
==============================================================
7 def do_stuff(numbers):
8 1 12 12.0 1.7 do_other_stuff(numbers)
9 1 208 208.0 30.0 l = [numbers[i]/43 for i in range(len(numbers))]
10 1 474 474.0 68.3 m = ['hello'+str(numbers[i]) for i in range(len(numbers))]
注意:以这种方式将函数添加到配置文件不需要更改已分析的代码(即,无需添加 @profile
装饰器)。
关于python - 如何使用 line_profiler(来自 Robert Kern)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23885147/
以下文本来自 Robert Sedwick 的算法书中的快速排序部分。 通过选择数组的左、中、右三个元素,我们可以将哨兵合并到这个方案中。对三个元素进行排序,然后在中间与a[r-1]交换一个,然后在a
我正在考虑实现 Robert Martin 的 Clean Architecture在一个项目中,我试图找出如何处理非平凡用例。 我发现很难将架构扩展到复杂/组合的用例,尤其是参与者是系统而不是用户的
在这种情况下,我需要在 .Net 中创建一个可以从 delphi 程序调用的非托管 DLL。我一直在做一些研究,并找到了 Robert Giesecke 的库 (RGiesecke.DllExport
我想知道寻边“罗伯茨交叉运算符”背后的概念 - 它是如何工作的?如何实现? (请不要使用代码;我想自己编码。) 最佳答案 您遍历源图像中的每个像素,并根据源像素及其东、南和东南相邻像素的值计算目标图像
首先,我在 2D 平面中实现了普通的、缓慢的 Poisson Disk Sampling 算法,它工作得很好。这个慢速版本会计算所有点之间的距离,并检查您希望放置的点与所有其他点之间的距离是否至少为
我正在阅读 Robert Sedgewick 写的关于算法的书。 public static void sort(Comparable[] a) { // Sort a[] into increa
我正在尝试实现 Clean Architecture由罗伯特·马丁描述。更具体地说,我正在使用 VIPER这是 Clean Architecture 的 iOS 版本。 我遇到的问题如下: 用户开始查
根据经验,这本书对于学习算法创建有多好? 最佳答案 我看过的最常见的算法书是Cormen, Leiserson, Rivest, and Stein's Introduction to Algorit
我正在阅读 Robertsedwick 的 C++ 排序算法 Property 1: Insertion sort and bubble sort use a linear number of com
我尝试使用 line_profiler 模块来获取 Python 文件的逐行配置文件。这是我到目前为止所做的: 1) 从 pypi 安装 line_profiler通过使用 .exe 文件(我在 Wi
我已经使用 np.fft 在 Python 中实现了信号处理 FFT 算法(太简单了)。现在我正在使用整数算法在 C 中完成此操作。经过一番研究,我发现互联网上最流行的 C 整数 FFT 库之一是 R
我已经成功使用了 Roberts UnmanagedExportLibrary.zip从 Delphi 2007 调用 .NET 2/3.5 程序集。 但是,当我使用 VS2010 将 C# 程序集重
对于新手问题,我深表歉意。我正在尝试在 Robert Sedgewick 和 Kevin Wayne 的第 4 版算法书中给出的 Eclipse 中运行 Java 程序:https://algs4.c
所以,最近,出于好奇,我买了 CLRS 的《算法导论》一书。当我开始阅读这本书时,我注意到书中一些非常典型的算法是以非常不同的方式实现的。 给定 CLRS 的快速排序实现与流行的快速排序 Hoare
我尝试使用 Robert Giesecke 的非托管导出在 C# (VS2010) 中创建非托管 dll。这是我的测试代码: using RGiesecke.DllExport; namespace
我们在 Delphi 应用程序中使用 Robert Giesecke 出色的非托管导出库已经有一段时间了。我们刚刚升级到 Visual Studio 2015,它似乎不再工作了——我可以在 VS201
我阅读了 Robert Martin 关于接口(interface)隔离原则的文章 here .在文章的最后,在解决 ATM UI 架构的问题时,他说: Consider also that each
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我刚刚提出并获得了我的问题的答案:“无法使用非托管导出返回自定义类型实例 (Robert Giesecke)”-> can't return custom type instance with unm
这是一个关于函数只做一件事的概念的问题。如果没有一些相关的上下文上下文就没有意义,所以我会在这里引用它们。它们出现在第 37-38 页: To say this differently, we wan
我是一名优秀的程序员,十分优秀!