Por Que Python É Tão Lento?




      Rudá Moura <ruda.moura@indt.org.br>
Por Que Python É Tão Lento?
 Esta palestra é sobre otimização e a linguagem Python.
 Não é para denegrir a imagem da nossa...
Por Que É Tão Lento?
“Por que é tão lento? No computador lá de casa as imagens
surgem imediatamente no meu Internet Explor...
Devo Otimizar?
 A preocupação prematura em otimização tem como
 efeito a geração de código confuso e de difícil
 manutençã...
Por Que Otimizar?
  Situações de limite:
    Tarefas que envolvam muito processamento no menor
    tempo possível: simulad...
Como Otimizar?

 Não fique apenas com o conhecimento que você tem
 do código.
 “90% do tempo de execução de um programa se...
Técnicas de Otimização
 Conheça a linguagem e suas nuances.
 O que é rápido?
   Estrutura de dados simples.
   Tuplas e Li...
Técnicas de Otimização
 Escolher algoritmos adequados.
 Fazer uso de threads.
 Fazer uso de chamadas assíncronas.
 Fazer u...
O Que É Lento?
 Estruturas de dados complexas.
 Tratamento de Exceção.
 Cair em um elemento que não existem em um
 dicioná...
Extensões em C
 É um recurso válido para obter maior velocidade.
 É útil porque é fácil fazer essas extensões em Python
 A...
Psyco
 O psyco é um compilador JIT para o Python.
 Vantagens:
   Fácil de usar, não é necessário fazer perfilagem. Fácil
 ...
Psyco
 Desvantagens:
   Específico para x86 (esqueça o uso em ARM, PPC).
   Consumo elevado de memória.
   A compilação é ...
O Que Nos Espera O Futuro?
 O novo parser AST (Python 2.5) e a promessa de
 otimização.
   O novo parser permite guardar m...
PyPy
 Implementação da linguagem Python em Python!
 O fato do interpretador estar descrito em alto nível em
 Python permit...
Resumo
 Otimize quando for realmente necessário.
 Procure usar uma ferramenta para saber aonde está o
 gargalo.
 Use estru...
Referências
 Python Patterns - An Optimization Anecdote.
 http://www.python.org/doc/essays/list2str.html
 Python Optimizat...
Agradecimentos
 Instituto Nokia de Tecnologia, aonde passo o meu
 tempo trabalhando e me divertindo.
 Aldenor Martins (lNd...
Upcoming SlideShare
Loading in …5
×

Por Que Python É Tão Lento?

2,877 views

Published on

Palestra realizada na 2ª conferência Python-Brasil, sobre questões de desempenho da linguagem Python.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,877
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
27
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Por Que Python É Tão Lento?

  1. 1. Por Que Python É Tão Lento? Rudá Moura <ruda.moura@indt.org.br>
  2. 2. Por Que Python É Tão Lento? Esta palestra é sobre otimização e a linguagem Python. Não é para denegrir a imagem da nossa adorada linguagem. Convenhamos que o Guido merece um puxão de orelha, ele não é o maior responsável em deixar o interpretador mais rápido! Apostem suas fichas no PyPy (Mas deixem o Psyco por perto).
  3. 3. Por Que É Tão Lento? “Por que é tão lento? No computador lá de casa as imagens surgem imediatamente no meu Internet Explorer!” (anônimo). Subestimar tarefas computacionais é uma típica atitude de leigos, superestimar é a atitude dos arrogantes. Fique com o meio termo.
  4. 4. Devo Otimizar? A preocupação prematura em otimização tem como efeito a geração de código confuso e de difícil manutenção. Aqueles que escrevem o código em menos tempo (Python) e com melhor leitura e simplicidade (Python) é que saem ganhando. Regras de ouro de otimização: “Otimizar cedo é a raiz de todos os males” (Hoare e Knuth) Não otimize!
  5. 5. Por Que Otimizar? Situações de limite: Tarefas que envolvam muito processamento no menor tempo possível: simulador de braço mecânico, clima em uma estufa, etc. Tarefas que envolvem um grande volume de dados: servidor de correio eletrônico com 1Mi de caixas-postais. Necessidade do cliente ou usuário. Capricho do desenvolvedor.
  6. 6. Como Otimizar? Não fique apenas com o conhecimento que você tem do código. “90% do tempo de execução de um programa se concentra em 10% do código”. Ferramentas de perfilagem permitem descobrir aonde estão os gargalos do programa. Módulos da biblioteca padrão: timeit.py – testar construções simples. profile.py – escrito em Python. hotshot – escrito em C.
  7. 7. Técnicas de Otimização Conheça a linguagem e suas nuances. O que é rápido? Estrutura de dados simples. Tuplas e Listas, dicionários, tempo de busca é constante. List comprehensions. Funções embutidas do Python. Acredite é rápido. Módulos para Python escritos em C. Programadores C usam apenas vetores e listas encadeadas, nós usamos mais tipos.
  8. 8. Técnicas de Otimização Escolher algoritmos adequados. Fazer uso de threads. Fazer uso de chamadas assíncronas. Fazer uso de cache. Usar as bibliotecas adequadas para cada tarefa: PyGame (SDL) – para desenvolvimento de jogos. PyNumeric ou NumPy ou o nome que eles estejam agora – para o cálculo numérico otimizado. Bibliotecas gráficas, bibliotecas para áudio, etc.
  9. 9. O Que É Lento? Estruturas de dados complexas. Tratamento de Exceção. Cair em um elemento que não existem em um dicionário. Trabalhar com strings, principalmente com cópias. Módulos escritos em Python que exijam muito desempenho Pickle x cPicke StringIO x cStringIO
  10. 10. Extensões em C É um recurso válido para obter maior velocidade. É útil porque é fácil fazer essas extensões em Python A biblioteca padrão já contém diversos módulos feitos em C (cPickle, XML, etc). Precisas escrever em C... Ok, nem tudo é perfeito. Um meio termo entre Python e C é o PyRex.
  11. 11. Psyco O psyco é um compilador JIT para o Python. Vantagens: Fácil de usar, não é necessário fazer perfilagem. Fácil mesmo: import psyco ; psyco.full() Gera código nativo de máquina, extremamente rápido. Ganho típico de 4x (2x ~ 100x). Muito compatível com o Python padrão. Funciona para Linux e Windows (MacOSX com x86?).
  12. 12. Psyco Desvantagens: Específico para x86 (esqueça o uso em ARM, PPC). Consumo elevado de memória. A compilação é perdida ao fim do programa.
  13. 13. O Que Nos Espera O Futuro? O novo parser AST (Python 2.5) e a promessa de otimização. O novo parser permite guardar mais informações da fases de análise léxica e sintática que o anterior. Espera-se com isso usar técnicas melhores de otimização no interpretador Python atual. Espera-se que ferramentas de IDE possam fazer uso para “introspecção”. Proposta do autor: Investigar maneiras de otimizar o byte-code.
  14. 14. PyPy Implementação da linguagem Python em Python! O fato do interpretador estar descrito em alto nível em Python permite experimentar: Com novas formas de otimização. Novas formas de customizar a Linguagem. Um interpretador feito em Python não ficaria mais lento? Sim, atualmente 10x mais lento que o cPython. Não! Estão usando a LLVM (Low Level Virtual Machine).
  15. 15. Resumo Otimize quando for realmente necessário. Procure usar uma ferramenta para saber aonde está o gargalo. Use estrutas de dados simples e rápidas, listas e dicionários principalmente Evite muito código em cláusulas try/except. Use algoritmos e bibliotecas adequadas a cada tarefa. Com o Pysco é possível ganhar velocidade sem muito esforço.
  16. 16. Referências Python Patterns - An Optimization Anecdote. http://www.python.org/doc/essays/list2str.html Python Optimization: extending with C. http://kortis.to/radix/python_ext/ Python, Máquina Virtual, Bytecode & Otimização. http://rstm.livejournal.com/1281.html Uniq: remover elementos repetidos em uma lista em Python. http://rstm.livejournal.com/4888.html Psyco http://psyco.sourceforge.net/ PyPy. http://codespeak.net/pypy/dist/pypy/doc/news.html LLVM. http://llvm.org/
  17. 17. Agradecimentos Instituto Nokia de Tecnologia, aonde passo o meu tempo trabalhando e me divertindo. Aldenor Martins (lNdT) por acreditar na viabilidade de Python como ferramenta no instituto. Gustavo Barbieri e Osvaldo Santana Neto, (INdT) conversas sobre Python. Sérgio Bruder e Guilherme Manika (Haxent), pela experiência de tratar dados em condições limite.

×