Como desenvolvedores Python, muitas vezes nos concentramos em fazer nosso código funcionar antes de nos preocuparmos em otimizá-lo. No entanto, ao lidar com aplicações de grande escala ou códigos de desempenho crítico, a otimização torna-se crucial. Nesta postagem, abordaremos duas ferramentas poderosas que você pode usar para otimizar seu código Python: o módulo cProfile e o interpretador PyPy.
Ao final desta postagem, você aprenderá:
Python é conhecido por sua facilidade de uso, legibilidade e vasto ecossistema de bibliotecas. Mas também é mais lento que algumas outras linguagens como C ou Java devido à sua natureza interpretada. Portanto, saber como otimizar seu código Python pode ser fundamental em aplicações sensíveis ao desempenho, como modelos de aprendizado de máquina, sistemas em tempo real ou sistemas de negociação de alta frequência.
A otimização normalmente segue estas etapas:
Agora, vamos começar criando o perfil do seu código.
cProfile é um módulo Python integrado para criação de perfil de desempenho. Ele rastreia quanto tempo cada função do seu código leva para ser executada, o que pode ajudá-lo a identificar as funções ou seções do código que estão causando lentidão.
A maneira mais simples de criar o perfil de um script é executando cProfile na linha de comando. Por exemplo, digamos que você tenha um script chamado my_script.py:
python -m cProfile -s cumulative my_script.py
Explicação:
Isso gerará um detalhamento detalhado de onde seu código está gastando seu tempo.
Vejamos um script Python básico que calcula números de Fibonacci recursivamente:
def fibonacci(n): if nExecutando este script com cProfile:
python -m cProfile -s cumulative fibonacci_script.pyCompreendendo a saída do cProfile
Depois de executar o cProfile, você verá algo assim:
ncalls tottime percall cumtime percall filename:lineno(function) 8320 0.050 0.000 0.124 0.000 fibonacci_script.py:3(fibonacci)Cada coluna fornece dados importantes de desempenho:
Se sua função Fibonacci levar muito tempo, este resultado mostrará onde concentrar seus esforços de otimização.
Você também pode usar cProfile programaticamente em seu código se desejar apenas criar perfis de seções específicas.
import cProfile def fibonacci(n): if nEtapa 2: otimizando seu código Python
Depois de identificar os gargalos em seu código usando cProfile, é hora de otimizar.
Técnicas comuns de otimização Python
- Usar funções integradas: Funções integradas como sum(), min() e max() são altamente otimizadas em Python e geralmente são mais rápidas do que loops implementados manualmente.
Exemplo:
# Before: Custom sum loop total = 0 for i in range(1000000): total = i # After: Using built-in sum total = sum(range(1000000))
- Evite chamadas de função desnecessárias: Chamadas de função têm sobrecarga, especialmente dentro de loops. Tente reduzir chamadas redundantes.
Exemplo:
# Before: Unnecessary repeated calculations for i in range(1000): print(len(my_list)) # len() is called 1000 times # After: Compute once and reuse list_len = len(my_list) for i in range(1000): print(list_len)
- Memoização: Para funções recursivas, você pode usar a memorização para armazenar resultados de cálculos caros para evitar trabalho repetido.
Exemplo:
from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if nIsso acelera bastante o cálculo de Fibonacci, armazenando os resultados de cada chamada recursiva.
Etapa 3: usando PyPy para compilação Just-in-Time
O que é PyPy?
PyPy é um interpretador Python alternativo que usa compilação Just-in-Time (JIT) para acelerar seu código Python. O PyPy compila caminhos de código executados com frequência em código de máquina, tornando-o muito mais rápido do que o interpretador CPython padrão para determinadas tarefas.
Instalando PyPy
Você pode instalar o PyPy usando um gerenciador de pacotes como apt no Linux ou brew no macOS:
# On Ubuntu sudo apt-get install pypy3 # On macOS (using Homebrew) brew install pypy3Executando código Python com PyPy
Depois que o PyPy estiver instalado, você poderá executar seu script com ele em vez do CPython:
pypy3 my_script.pyPor que usar o PyPy?
Agora, vamos combinar essas ferramentas para otimizar totalmente seu código Python.
Vamos revisitar nosso exemplo de Fibonacci e juntar tudo.
from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if nDepois de otimizar o código com memoização, execute-o usando PyPy para obter mais melhorias de desempenho:
pypy3 fibonacci_script.pyConclusão
Ao aproveitar cProfile e PyPy, você pode otimizar bastante seu código Python. Use cProfile para identificar e resolver gargalos de desempenho em seu código. Em seguida, use o PyPy para aumentar ainda mais a velocidade de execução do seu programa por meio da compilação JIT.
Resumindo:
- Perfil do seu código com cProfile para entender os gargalos de desempenho.
- Aplique técnicas de otimização Python, como uso de recursos integrados e memoização.
- Execute o código otimizado no PyPy para obter um desempenho ainda melhor.
Com essa abordagem, você pode fazer com que seus programas Python sejam executados de maneira mais rápida e eficiente, especialmente para tarefas vinculadas à CPU.
Conecte-se comigo:
Github
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3