2009-11-30 10 views
12

में सीप्रोफाइल काम नहीं कर सकता मैं कुछ बहुत बुनियादी याद कर रहा हूं।आईपीथॉन

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)') 

जब मैं IPython में उपरोक्त कोड चलाने के लिए, मैं:

NameError: name 'c' is not defined 

मैं क्या याद आ रही है?

अद्यतन मेरी सत्र की सटीक पेस्ट यहाँ है: http://pastebin.com/f3e1b9946

अद्यतन मुझे लगता है कि समस्या 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

हालांकि आईपीथन बहुत आसान है, लेकिन काम करने वाले कोड या मास्क त्रुटियों को तोड़ने पर बहुत दुर्लभ मामले हैं। इसलिए जब आप ऐसी रहस्यमय त्रुटियां प्राप्त करते हैं तो मानक दुभाषिया में कोड आज़माकर उपयोगी होता है।

15

नहीं मूल पोस्टर की समस्या है, लेकिन आप भी अगर आप __main__ के अलावा कुछ में cProfile.run() लागू कर रहे हैं यह एक ही त्रुटि प्राप्त कर सकते हैं नेमस्पेस (फ़ंक्शन या आयात के भीतर से)। मुझे यह पता लगा मदद करने के लिए this post को

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

कुडोस: उस मामले में आप विधि रन() के बजाय निम्नलिखित का उपयोग करने की जरूरत है।

+0

आह! विजेता, मुझे विश्वास नहीं था कि मेरे कोड को संपादित किए बिना खोल से प्रोफाइल करने का कोई तरीका नहीं था। –

संबंधित मुद्दे