Python Profilleme (Profiling)
sudo pip install line_profiler
Komut satirindan isletmek
import time
@profile
def f():
for i in range(100): print i
g()
def g():
time.sleep(1)
if __name__ == "__main__":
f()
Komut satirinda
python -m kernprof -l -v test.py > /tmp/prof1.txt
Sonuc
Line #
Hits
Time
Per Hit
% Time
Line Contents==============================================================
3
@profile
4
5
def f():
6
101
233
2.3
0.0
for i in range(100): print i
7
1
1001139 1001139.0
100.0
g()
Sonuca bakarsak zamanin yuzde yuzunun g() icinde gecirildigini goruyoruz. Bu normal cunku icinde sleep ibaresi var! Hits bu satirin kac kez isletildigini gosterir, time bu satirda toplam ne kadar zaman gecirildigini gosterir. Per hit satirin her isletildiginde ne kadar zaman harcandigini belirtir. Yuzde ise tum isletim icinde bu satirda yuzde kac zaman harcandigini belirtir.
Not: Eger ustteki kodu python test.py olarak isletirseniz @profile dekoratorunun import edilmedigi hakkinda sikayet gelecektir.
Bir diger yontem, (sudo pip install profilehooks yaptiktan sonra),
from profilehooks import profile
ile dekaratoru import etmek. O zaman normal komut satirindan python test.py ile isletim olur. Ya da herhangi bir sekilde kod isletimi olur, mesela Flask icinden yuklenip ayni kodun isletilmesi gibi. Bu durumda sonuc raporlari bu modulu import eden surec "bir sekilde bittigi" zaman ekrana basilir.
Bizim tercihimiz ilk gosterilen secenek. Calisma seklimiz soyle: sonuclara bakip, duzeltme yapiyoruz, tekrar isletiyoruz, daha sonra @profile dekatorunu kod icinde cagrim zinciri acisindan daha derin noktalara koyuyoruz, mesela a ->b -> c cagrimi var, a ile basliyoruz, sonra dekorator b, c uzerine konanabiliyor. Ilk yontemin onemli bir avantaji sonuclarin bir dosyaya hemen yazilabiliyor olmasi.
Bu profilleme yontemi "satir profillemesi (line profiler)" olarak biliniyor.
Yukarı