لا يمكن أن تجعل cProfile العمل في IPython
سؤال
أنا في عداد المفقودين شيء أساسي جدا.
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 التي (على اتضح) هو مصدر المشكلة
المحلول
في حين داخل IPython ، يمكنك استخدام %prun السحر وظيفة:
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}
نصائح أخرى
لا الملصق الأصلي مشكلة, ولكن يمكنك أيضا الحصول على نفس هذا الخطأ إذا كنت تحتج cProfile.تشغيل() في شيء آخر غير ____ الرئيسية مساحة (من خلال وظيفة أو الاستيراد).في هذه الحالة تحتاج إلى استخدام التالية بدلا من تشغيل() الطريقة:
cProfile.runctx("your code", globals(), locals())
مجد هذا المنصب على مساعدتي في هذا الرقم.
على الرغم من أن IPython مفيد جدا, هناك الكثير من الحالات النادرة عندما يكسر العامل رمز أو أقنعة الأخطاء.لذا سيكون من المفيد أن نحاول رمز القياسية مترجم عندما تحصل مثل هذه باطني الأخطاء.