sys._current_frames(): Radiografando seu software em tempo real enquanto ele roda — Plone Conference / PythonBrasil
You are here: Home / Program / Python Brasil / Web Development / sys._current_frames(): Radiografando seu software em tempo real enquanto ele roda
sys._current_frames(): Radiografando seu software em tempo real enquanto ele roda
Problemas de performance são coisas difíceis e frustrantes de investigar. Especialmente se só acontecem quando seu cliente está olhando, mas não você.
A linguagem Python vem com ferramentas elaboradas de profiling, como o módulo cProfile, mas em ambientes complexos de código, seu relatório pode ser difícil de decifrar, e a lentidão que acrescenta ao código executado tornam proibitivo executá-lo em ambientes em produção.
Porém, Python é uma linguagem muito reflexiva, permitindo extensa investigação de seu próprio estado durante a execução, e uma de suas ferramentas menos conhecidas é função sys._current_frames(). Ela pode ser usada para tirar radiografias instantâneas do que todas as threads do seu programa estão fazendo. Também pode ser usada para fazer uma espécie de profiling por amostragem, com quase nada de impacto de performance adicional no seu sistema.
Nesta palestra vamos investigar como essa função pode ser usada para descobrir o que seu programa está fazendo, exatamente no momento em que ele está se comportando mal. Vamos também entender como e porque olhar para uma série de tracebacks ajuda muito mais a localizar rapidamente os "pontos quentes" do seu código do que olhar para um bando de estatísticas.
Mostraremos também alguns estudos de caso de problemas reais de performance desatados com o auxílio essa técnica que foram causados por interações complexas entre components distintos, incluindo:
Um caso difícil em uma instalação de ERP5 em produção em um cliente corporativo da Nexedi
Um caso de gargalos intermitentes de performance em um grande portal governamental no Brasil
Por fim, demonstraremos o uso do slowlog, um middleware WSGI que incorpora essa técnica, em conjunto com um aplicativo escrito em Django.
Leonardo trabalha com Python e Zope desde 2001 e é um core developer do Zope e do Plone. Co-fundador da Associação Python Brasil, evangelista discreto de Python, e teve uma mãozinha no fato de que hoje o Governo Federal e o programa Interlegis usam Python e Plone. Hoje trabalha na Geekie.com.br, uma StartUp na área de Educação que personaliza a experiência de aprendizado por meio da tecnologia.