Como medir a sua aplicação - Python Brasil 8

  • View
    557

  • Download
    1

Embed Size (px)

DESCRIPTION

Slides da minha apresentação na Python Brasil 8

Text of Como medir a sua aplicação - Python Brasil 8

  • 1. Como medir a sua aplicaoIntroduo conceitos de profiling, debug e tracing Mauro Baraldi - Python Brasil 2012
  • 2. Quem sou eu?
  • 3. http://www.66batman.com/cgi-bin/yabb2/YaBB.pl?num=1296085129
  • 4. Mauro Navarro BaraldiProgramando em Python desde 2001 DesenvolvedorMais
  • 5. Pai da Maria Eduarda, do Joo Fernando e marido da Camila
  • 6. Tpicos- Conceitos- Por que monitorar uma aplicao- Debugging- Profiling- Tracing- Memory Profiling- Holly Grail- Dvidas?
  • 7. Conceitos- Debug: Metodo de Investigao do sistema(em execuo) em busca do problema/erro.- Profiling: Anlise dinmica de um sistemapara medir recursos usado por ele no sistema.- Tracing: Processo de gravar ocomportamento de runtime do sistema paraanlise (debug/profiling)
  • 8. Porque monitorar uma aplicao- Aprendizado- Bugs- Segurana- Desempenho
  • 9. Premature optimization is the root of all evil. Tony Hoare http://www.turing100.manchester.ac.uk/index.php/speakers/invited-list/11-speakers/39
  • 10. Debugging http://static.ddmcdn.com/gif/myths-everyday-science-1.jpg
  • 11. pdbBiblioteca da padro para debugging de cdigoPrs:- fcil- simples- nativaContras:- IMHO nenhum!
  • 12. debug_app.py#!/usr/bin/env pythonfrom pdb import set_tracedef debug_me(value): set_trace() # Aqui ativa-se o debug if value > 0: print positivo elif value < 0: print negativo else: print zeroif __name__ == __main__: debug_me(0)
  • 13. resultado do pdbmauro@r2d2:~/projetos/pythonbrasil8$ python pdb_app.py> /home/mauro/projetos/pythonbrasil8/pdb_app.py(9)debug_me()-> if value > 0:(Pdb) n> /home/mauro/projetos/pythonbrasil8/pdb_app.py(11)debug_me()-> elif value < 0:(Pdb) n> /home/mauro/projetos/pythonbrasil8/pdb_app.py(14)debug_me()-> return zero(Pdb) n--Return--> /home/mauro/projetos/pythonbrasil8/pdb_app.py(14)debug_me()->zero-> return zero(Pdb) n--Return--> /home/mauro/projetos/pythonbrasil8/pdb_app.py(17)()->None-> debug_me(0)(Pdb) n
  • 14. Profilinghttp://www.guardian.co.uk/books/booksblog/2012/oct/30/scary-stories-halloween-francis-marion-crawford
  • 15. Standard Library http://aidsource.ning.com/page/resource-library
  • 16. cProfileBiblioteca padro para profilingPrs:- standard lib- baixo impacto na execuo.- usa extenso em CContras:- s funciona com metodos- no h suporte para grficos (nativo)
  • 17. profile_app.py#!/usr/bin/env pythondef profile_me(limit): counter = 0 while counter 0:trace_app.py(7): elif value < 0:trace_app.py(10): return zero --- modulename: trace, funcname: _unsettracetrace.py(80): sys.settrace(None)
  • 33. disptraceTracing de cdigo exportando a saida para HTMLPrs:- exporta em um formato visualContras:- roda dentro de um contexto da app
  • 34. disptrace_app.pyimport disptracedef browse_disptrace(dt): import tempfile, webbrowser, urllib, os html = dt.render() tempfiledes, temppath = tempfile.mkstemp(suffix=.html) tempfile = os.fdopen(tempfiledes, "w") tempfile.write(html) tempfile.close() tempurl = "file://{}".format(urllib.pathname2url(temppath)) webbrowser.get(None).open_new(tempurl)def if_test(a, b, c): if a > 10: print "this" elif b > 10: print "that" else: print "result is", b*ct = disptrace.DispTrace()t.runfunc(if_test, 1, 2, 3)browse_disptrace(t)
  • 35. visualizao da anlise
  • 36. Memory Profiling http://spectrum.ieee.org/semiconductors/memory/the-quest-for-a-universal-memory
  • 37. memory profilerProfiling de memoriaPrs:- facil- simples- integrao com pdbContras:- No encontrei
  • 38. memory_profiler_app.py@profiledef potencia(expoente): for i in range(expoente): print 2^%i = %i % (i, pow(2,i))if __name__ == __main__: potencia(10)
  • 39. resultado do memory_profiler$ python -m memory_profiler memory_profile_app.pyFilename: memory_profile_app.pyLine # Mem usage Increment Line Contents================================================ 3 @profile 4 9.00 MB 0.00 MB def potencia(expoente): 5 9.00 MB 0.00 MB for i in range(expoente): 6 print 2^%i = %i % (i, pow(2,i))
  • 40. All togetherhttp://janeaustenfilmclub.blogspot.com.br/2011/06/monty-python-and-holy-grail.html
  • 41. Holly Grailhttp://www.shopping.com/Toy-Vault-Monty-Python-s-Holy-Grail-Plush/info
  • 42. psutilsbiblioteca de monitoramento de recursos do sistemaPrs:- multi-plataforma- fcil- resultados em estruturas de dados Python- monitora: - cpu/processos - memoria/discos, - rede - usuarios
  • 43. ReferenciasMdulos e aplicaespdb: http://docs.python.org/2/library/pdb.htmlcProfile: http://docs.python.org/2/library/profile.htmlline_profiler: http://packages.python.org/line_profiler/RunSnakeRun: http://www.vrplumber.com/programming/runsnakerun/trace: http://docs.python.org/2/library/trace.htmldisp_trace: https://github.com/atsuoishimoto/disptracememory_profiler: https://github.com/fabianp/memory_profilerpsutil: http://code.google.com/p/psutil/MaisCode Profiling: http://en.wikipedia.org/wiki/Code_profilingPython Profiling: http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Profiling_CodeProfile Hooks (decorators for Python profiling): http://mg.pov.lt/profilehooks/
  • 44. Dvidas?http://fogsmoviereviews.com/2012/06/24/movies-that-everyone-should-see-monty-python-and-the-holy-grail/
  • 45. Source Codehttps://github.com/maurobaraldi/pybr8
  • 46. Thank Youhttp://spectrumculture.com/2010/01/film-dunce-monty-python-and-the-holy-gr