2011-06-05 70 views
2

我在找一個工具來分析我的python腳本。例如是否有工具可用於分析python代碼?

  1. 代碼的哪些部分花費時間最多的
  2. 代碼的哪些部分消耗了太多的內存
  3. 等等...

是否有類似的東西?

+6

這些類型的工具通常被稱爲分析器。 – icktoofay 2011-06-05 23:12:53

回答

3

看看cProfile。下面是一個使用示例:

[email protected]:~ $ cat foo.py 
def double(i): 
    return i * 2 

def halve(i): 
    return i/2.0 

for i in range(10000): 
    double(i) 
    halve(i) 
[email protected]:~ $ python -m cProfile foo.py 
     20005 function calls in 0.009 CPU seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 0.009 0.009 <string>:1(<module>) 
     1 0.006 0.006 0.009 0.009 foo.py:1(<module>) 
    10000 0.001 0.000 0.001 0.000 foo.py:1(double) 
    10000 0.002 0.000 0.002 0.000 foo.py:4(halve) 
     1 0.000 0.000 0.009 0.009 {execfile} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
     1 0.000 0.000 0.000 0.000 {range} 

一個很好的內存設置,如在由Sven Marnach聯繫到帖子中提到,是Heapy

0

我經常使用Ipython來剖析我的代碼。執行腳本用魔術命令「%運行」這樣的(一個IPython的提示內側):

%run -p your_python_script.py 

運行的Python分析器模塊的控制下,該程序。

你甚至可以在配置文件聲明(如函數調用)與「%PRUN」魔術:

%prun a_python_statement 

是什麼樣%PRUN不錯,就是它的上下文中執行該語句的當前會話(即,您可以使用您之前定義的變量以及當前名稱空間中的任何其他變量)。

如果你想獲得每行分析信息,我發現line_profiler模塊非常方便。它有點老了,但它的工作......正如Robert Kern所編寫的東西所預期的那樣;-)。