SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
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 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).
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.
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!
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.
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.
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.
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.
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
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.
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?).
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.
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.
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).
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.
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/
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.

Mais conteúdo relacionado

Mais procurados

Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?Marcel Caraciolo
 
NãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até PensamentoNãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até PensamentoOsvaldo Santana Neto
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010Luiz Aldabalde
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantesrichardsonlima
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesMarcos Thomaz
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoWeldir Fernando Dias
 
Python com baterias incluídas v2.0
Python com baterias incluídas v2.0Python com baterias incluídas v2.0
Python com baterias incluídas v2.0Jonh Edson
 

Mais procurados (19)

Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
Python, CPython, Pythonico, Cython
Python, CPython, Pythonico, CythonPython, CPython, Pythonico, Cython
Python, CPython, Pythonico, Cython
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?Conhencendo Python e por que ela importa?
Conhencendo Python e por que ela importa?
 
NãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até PensamentoNãNãNã Nã - Python Refresca até Pensamento
NãNãNã Nã - Python Refresca até Pensamento
 
The zen of python 2010
The zen of python 2010The zen of python 2010
The zen of python 2010
 
Mini Curso Python
Mini Curso PythonMini Curso Python
Mini Curso Python
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 
Palestra BrOffice.org
Palestra BrOffice.orgPalestra BrOffice.org
Palestra BrOffice.org
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Minicurso: Python e suas baterias incluídas
Minicurso: Python e suas baterias incluídasMinicurso: Python e suas baterias incluídas
Minicurso: Python e suas baterias incluídas
 
Hello, Python!
Hello, Python!Hello, Python!
Hello, Python!
 
Palestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas AplicaçõesPalestra Apresentando Python e Suas Aplicações
Palestra Apresentando Python e Suas Aplicações
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Python 3k
Python 3kPython 3k
Python 3k
 
Introdução ao Python
Introdução ao PythonIntrodução ao Python
Introdução ao Python
 
Python com baterias incluídas v2.0
Python com baterias incluídas v2.0Python com baterias incluídas v2.0
Python com baterias incluídas v2.0
 
Curso Python - Aula 01
Curso Python - Aula 01Curso Python - Aula 01
Curso Python - Aula 01
 
Python para Programadores
Python para ProgramadoresPython para Programadores
Python para Programadores
 

Semelhante a Por que Python é lento? Técnicas e ferramentas de otimização

A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termosValore I/O
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar pythonLourenço Junior
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoandreluizlugon
 
Porque python é legal! d
Porque python é legal!  dPorque python é legal!  d
Porque python é legal! dJoelmir Ribacki
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoFelipeDi
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Python para programadores Ruby
Python para programadores RubyPython para programadores Ruby
Python para programadores RubyEric Hideki
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)Filipe Chagas Ferraz
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoUbirajara Cavaco
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Guilherme Medeiros
 
Por que python? fisl 14 - 2013
Por que python?   fisl 14 - 2013Por que python?   fisl 14 - 2013
Por que python? fisl 14 - 2013Marco Mendes
 
Por Que Python - #PUGCE
Por Que Python - #PUGCEPor Que Python - #PUGCE
Por Que Python - #PUGCETiago Freire
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6Fabio Spanhol
 

Semelhante a Por que Python é lento? Técnicas e ferramentas de otimização (20)

A lógica do Python e seus termos
A lógica do Python e seus termosA lógica do Python e seus termos
A lógica do Python e seus termos
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Programação Python na Iot
Programação Python na IotProgramação Python na Iot
Programação Python na Iot
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar python
 
Slide
SlideSlide
Slide
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Porque python é legal! d
Porque python é legal!  dPorque python é legal!  d
Porque python é legal! d
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Python para programadores Ruby
Python para programadores RubyPython para programadores Ruby
Python para programadores Ruby
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
Aula - Introdução (Curso de Python Básico -- FATEC SENAI MT)
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!
 
Por que python? fisl 14 - 2013
Por que python?   fisl 14 - 2013Por que python?   fisl 14 - 2013
Por que python? fisl 14 - 2013
 
Por Que Python - #PUGCE
Por Que Python - #PUGCEPor Que Python - #PUGCE
Por Que Python - #PUGCE
 
Python b1tch
Python b1tchPython b1tch
Python b1tch
 
AulaPython.pdf
AulaPython.pdfAulaPython.pdf
AulaPython.pdf
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 

Mais de Rudá Moura

HTTPS com TLS em Modo RSA
HTTPS com TLS em Modo RSAHTTPS com TLS em Modo RSA
HTTPS com TLS em Modo RSARudá Moura
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)Rudá Moura
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosRudá Moura
 
Criação de ambientes em chroot
Criação de ambientes em chrootCriação de ambientes em chroot
Criação de ambientes em chrootRudá Moura
 

Mais de Rudá Moura (6)

HTTPS com TLS em Modo RSA
HTTPS com TLS em Modo RSAHTTPS com TLS em Modo RSA
HTTPS com TLS em Modo RSA
 
K computer
K computerK computer
K computer
 
Pylibmc
PylibmcPylibmc
Pylibmc
 
Python No Terra (2006-12-21)
Python No Terra  (2006-12-21)Python No Terra  (2006-12-21)
Python No Terra (2006-12-21)
 
Python em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhosPython em (mais de) 10 minutinhos
Python em (mais de) 10 minutinhos
 
Criação de ambientes em chroot
Criação de ambientes em chrootCriação de ambientes em chroot
Criação de ambientes em chroot
 

Por que Python é lento? Técnicas e ferramentas de otimização

  • 1. Por Que Python É Tão Lento? Rudá Moura <ruda.moura@indt.org.br>
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.