====== Teljesítmény teszt ====== * http://stackoverflow.com/questions/24791251/install-pyyaml-using-pip-add-pyyaml-as-pip-dependency/24791419#24791419 * http://www.huyng.com/posts/python-performance-analysis/ * https://docs.python.org/3.4/library/tracemalloc.html ===== Futás idő ===== - Függőségek telepítése: pip install line_profiler - Dekoráljuk meg a tesztelendő függvényeket ''@profile'' dekorátorral - Indítsuk el speciálisan: kernprof -l script_to_profile.py - Nézzük meg az eredményt: python -m line_profiler script_to_profile.py.lprof Pystone(1.1) time for 50000 passes = 2.48 This machine benchmarks at 20161.3 pystones/second Wrote profile results to pystone.py.lprof Timer unit: 1e-06 s 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 ===== Memória ===== - Függőségek telepítése: pip install -U memory_profiler pip install psutil - Dekoráljuk meg a tesztelendő függvényeket ''@profile'' dekorátorral - Indítsuk el speciálisan: python -m memory_profiler primes.py Filename: primes.py Line # Mem usage Increment Line Contents ============================================== 2 @profile 3 7.9219 MB 0.0000 MB def primes(n): 4 7.9219 MB 0.0000 MB if n==2: 5 return [2] 6 7.9219 MB 0.0000 MB elif n<2: 7 return [] 8 7.9219 MB 0.0000 MB s=range(3,n+1,2) 9 7.9258 MB 0.0039 MB mroot = n ** 0.5 10 7.9258 MB 0.0000 MB half=(n+1)/2-1 11 7.9258 MB 0.0000 MB i=0 12 7.9258 MB 0.0000 MB m=3 13 7.9297 MB 0.0039 MB while m <= mroot: 14 7.9297 MB 0.0000 MB if s[i]: 15 7.9297 MB 0.0000 MB j=(m*m-3)/2 16 7.9258 MB -0.0039 MB s[j]=0 17 7.9297 MB 0.0039 MB while j ===== Leak keresés ===== - Függőségek telepítése: pip install objgraph - Kód megállítása ''pdb''-vel - A jelenleg memóriában lévő objektumokról riport kérése: import objgraph objgraph.show_most_common_types() MyBigFatObject 20000 tuple 16938 function 4310 dict 2790 wrapper_descriptor 1181 builtin_function_or_method 934 weakref 764 list 634 method_descriptor 507 getset_descriptor 451 type 439 - Függőségi gráf generálása: objgraph.show_backref([x], filename="/tmp/backrefs.png")