【发布时间】:2012-06-12 21:35:50
【问题描述】:
我正在尝试使用 Cython 优化一些代码,但 cProfile 没有提供足够的信息。
要做好分析,我应该创建许多子例程 func2, func3,... , func40 吗?
请注意,我在mycython.pyx 中有一个函数func1,但它有许多for 循环和内部操作。但是 cProfile 并没有告诉我这些循环的统计数据。
2009 function calls in 81.254 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 81.254 81.254 <string>:1(<module>)
2 0.000 0.000 0.021 0.010 blah.py:1495(len)
2000 0.000 0.000 0.000 0.000 blah.py:1498(__getitem__)
1 0.214 0.214 0.214 0.214 mycython.pyx:718(func2)
1 80.981 80.981 81.216 81.216 mycython.pyx:743(func1)
1 0.038 0.038 81.254 81.254 {mycython.func1}
2 0.021 0.010 0.021 0.010 {len}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
【问题讨论】:
-
看起来您最耗时的操作无论如何都涉及对字符串的操作,所以也许您应该专注于通过更有效的算法访问您的字符串。
-
我正在努力遵循优化的原则,sayeth,如果没有 profileth firsteth,你就不能优化
-
我正在查看您的个人资料的第一行,这表明您将要进行的任何优化。他们必须来自文件/库?
<string>(不太确定是哪个对象)。也就是说,我喜欢你的措辞。 -
@JeffTratner 请注意,配置文件按名称排序,而不是按时间降序排列。似乎字符串操作占用的时间与调用
mycython.func1的时间完全相同。
标签: python optimization profiling cython cprofile