SORU
13 EKİM 2010, ÇARŞAMBA


Nasıl python kodu satır satır profili miyim?

CProfile benim profil kod kullanıyorum ve harika çalışıyor. Ben de gprof2dot.py sonuçlar (biraz daha net yapar) görselleştirmek için kullanın.

Ancak, cProfile (ve şimdiye kadar gördüğüm en diğer python profilciler) fonksiyonu-çağrı düzeyde tercih gibi görünüyor. Bu belirli işlevleri çağrıldığında karışıklık farklı yerlerden - çağrı #1 veya #2 Arama vaktimin çoğunu alıyor hiçbir fikrim yok neden. Bu söz konusu işlevi 6 düzeyleri derin, 7 diğer yerlerden söyleyince daha da kötü olur.

Yani benim soru: nasıl-satır-satır analiz alabilirim? Bunun yerine:

function #12, total time: 2.0s

Böyle bir şey görmek istiyorum

function #12 (called from somefile.py:102) 0.5s
function #12 (called from main.py:12) 1.5s

cProfile toplam zaman "" ana, ama yine bu bağlantı katmanları ve birbirine bağlı bir sürü arama var kaybolur. nasıl transfer ettiğini gösteriyor

İdeal olarak, veri ayrıştırılamadı, gösterin o zaman benim kaynak toplam süre her satırda bir dosya ile verilen bir GUI olmasını çok isterdim. Şöyle bir şey:

main.py:

a = 1 # 0.0s
result = func(a) # 0.4s
c = 1000 # 0.0s
result = func(c) # 5.0s

İkinci "(c) "işlev(a)" çağrısı. bu çağrı, ayrı zaman ayırmak kadar ne olduğunu görmek için" çağrı işlevi tıklatın için mümkün olurdu o zaman

Bu mantıklı mı? Bilgi bu tür toplayan herhangi bir profil kütüphanesi var mı? Özledim ben muhteşem bir araç var mı? Herhangi bir geri bildirim takdir edilmektedir. Teşekkürler!!

CEVAP
13 EKİM 2010, ÇARŞAMBA


Robert Kern's line_profiler içindir diye düşünüyorum. Bağlantı:

File: pystone.py
Function: Proc2 at line 149
Total time: 0.606656 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
   149                                           @profile
   150                                           def Proc2(IntParIO):
   151     50000        82003      1.6     13.5      IntLoc = IntParIO   10
   152     50000        63162      1.3     10.4      while 1:
   153     50000        69065      1.4     11.4          if Char1Glob == 'A':
   154     50000        66354      1.3     10.9              IntLoc = IntLoc - 1
   155     50000        67263      1.3     11.1              IntParIO = IntLoc - IntGlob
   156     50000        65494      1.3     10.8              EnumLoc = Ident1
   157     50000        68001      1.4     11.2          if EnumLoc == Ident1:
   158     50000        63739      1.3     10.5              break
   159     50000        61575      1.2     10.1      return IntParIO

Bu yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amena

    Amena

    15 Kasım 2006
  • BumbleDroid

    BumbleDroid

    18 EKİM 2010
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009