2009-11-30 4 views
12

非常に基本的なものがありません。私はIPythonで上記のコードを実行するとIPythonでcProfileを動作させることができません

class C: 
    def __init__(self): 
     self.N = 100 
     pass 

    def f(self, param): 
     print 'C.f -- param' 
     for k in xrange(param): 
      for i in xrange(self.N): 
       for j in xrange(self.N): 
        a = float(i)/(1+float(j)) + float(i/self.N) ** float(j/self.N) 

import cProfile 

c = C() 
cProfile.run('c.f(3)') 

、私が取得:

NameError: name 'c' is not defined 

私は何をしないのですか?

UPDATE私のセッションの正確なペーストはここにある:http://pastebin.com/f3e1b9946

UPDATE私が問題の原因である(でそれが判明)、問題がIPythonで起こることを言及しなかった

答えて

24

IPythonの内側に、あなたは%prun magic functionを使用することができますが:

In [9]: %prun c.f(3) 
C.f -- param 
     3 function calls in 0.066 CPU seconds 

    Ordered by: internal time 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.066 0.066 0.066 0.066 <string>:6(f) 
     1 0.000 0.000 0.066 0.066 <string>:1(<module>) 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
+0

うわー、それは素晴らしいです!私は%prunについて知りませんでした:) –

+0

'%prun magic function'のデッドリンクです。更新すべき内容が見つかりませんでした。 – retracile

+1

@retracile:ヘッドアップに感謝します。リンクが修正されました。 – unutbu

3

IPythonは非常に便利ですが、実際のコードが破損したりエラーがマスクされたりする稀なケースがたくさんあります。このような神秘的なエラーが発生した場合、標準のインタプリタでコードを試してみると便利です。

15

ないオリジナルポスターの問題は、しかし、あなたは__main__以外の何かにcProfile.run()を呼び出している場合も、これと同じエラーを取得することができます名前空間(関数またはインポート内から)私はこれを理解助けるためthis post

cProfile.runctx("your code", globals(), locals()) 

賞賛:その場合は、次の代わりに、run()メソッドを使用する必要があります。

+0

ああ!勝者は、コードを編集することなくシェルからプロファイルする方法がないと信じられませんでした。 –

関連する問題