是否有效用Cython cProfiling意味着编写多个子功能呢?(Does effective

2019-07-29 21:02发布

我试图优化一些代码用Cython,但CPROFILE没有提供足够的信息。

要做到在分析一个好工作,我要创造很多的子程序FUNC2,FUNC3,...,func40?

注意下面,我有一个功能func1mycython.pyx ,但它有许多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}

Answer 1:

是的,它确实。 提供给最细粒度cProfile是一个函数调用。 你必须FUNC1分成多个功能。 (请注意,你可以让他们FUNC1里面定义的函数,因此只适用于FUNC1。)

如果你想更细致的分析(线路电平),那么你需要一个不同的分析器。 看看这条线级别的探查 ,但我不认为它适用于用Cython。



Answer 2:

您需要启用您用Cython代码分析的支持。 使用

# cython: profile=True

http://docs.cython.org/src/tutorial/profiling_tutorial.html



文章来源: Does effective Cython cProfiling imply writing many sub functions?