====== 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")