Flávio Ribeiro

III Encontro do Grupo de Usuários de Python de Pernambuco
                      Abril de 2010
Quem sou?
Flávio Ribeiro

Trezeano
Graduando em Engenharia Elétrica (IFPB)
Engenheiro de Software (Avaty! Tecnologia)
Pyth...
Agenda
Conceitos de Sistemas Embarcados

Desenvolvimento de Software para esses Sistemas

Por que Python?

Algumas Dicas :...
Conceitos de
Sistemas Embarcados
        Sistemas Embarcados são sistemas eletrônicos
 microprocessados (computadores) enc...
Conceitos de
       Sistemas Embarcados
●   Escassez em recursos de Processamento, Armazenamento e Autonomia

●   Funciona...
●   Divertidos de Programar e Manipular!
Desenvolvendo
       Para esses Sistemas
●   Equilíbrio entre legibilidade x qualidade & velocidade do código
Desenvolvendo
       Para esses Sistemas
●   Equilíbrio entre legibilidade x qualidade & velocidade do código
    ● "Otimi...
Desenvolvendo
       Para esses Sistemas
●   Equilíbrio entre legibilidade x qualidade & velocidade do código
    ● "Otimi...
Desenvolvendo
       Para esses Sistemas
●   Equilíbrio entre legibilidade x qualidade & velocidade do código
    ● "Otimi...
Desenvolvendo
       Para esses Sistemas
●   Equilíbrio entre legibilidade x qualidade & velocidade do código
    ● "Otimi...
Por que Python?

●   Encapsulamento e Controle de Acesso
Por que Python?

●   Encapsulamento e Controle de Acesso

●   Mais reuso do código!
Por que Python?

●   Encapsulamento e Controle de Acesso

●   Mais reuso do código!

●   Portabilidade
Por que Python?

●   Encapsulamento e Controle de Acesso

●   Mais reuso do código!

●   Portabilidade

●   Melhor testabi...
Por que Python?

●   Encapsulamento e Controle de Acesso

●   Mais reuso do código!

●   Portabilidade

●   Melhor testabi...
Por que Python?

●   Encapsulamento e Controle de Acesso

●   Mais reuso do código!

●   Portabilidade

●   Melhor testabi...
Por que Python?

●   Encapsulamento e Controle de Acesso

●   Mais reuso do código!

●   Portabilidade

●   Melhor testabi...
Algumas Dicas
Desacople!
Desacople!
Módulos que não interagem entre si não precisam disputar a GIL do
                  processo Python com outros!
Desacople!
Módulos que não interagem entre si não precisam disputar o GIL do
                  processo Python com outros!...
E o que
é o GIL?
Em poucas palavras...

 GIL – Global Interpreter Lock, é usado para
 proteger objetos Python de serem modificados
 entre v...
“It's simple : threads hold the GIL when running”

                 David Beazley (www.dabeaz.com)




E o que
é o GIL?
“It limits thread performance”

                 David Beazley (www.dabeaz.com)




E o que
é o GIL?
David Beazley (www.dabeaz.com)




              Threads
Threads em Python são implementadas usando o
padrão POSIX. Porém...




                              Threads
Threads em Python são implementadas usando o
padrão POSIX. Porém...
 O GIL prejudica muito a performance de threads
 e pro...
Evite o excesso de
tratamentos de erro!
Sua classe
     parece
Com algum tipo
     nativo?

   Herde-o!
Evite herança
   múltipla


  Evite Heranças Múltiplas
Mais dicas...
●   Quando testar 'a in b', b deve ser um set ou dicionário

●   Concatenação de strings é melhor com ''.joi...
Agora sim, otimize!




Por fim, otimize
Agora sim, otimize!

●   Se usar threads, crie um método para matar ela:
Agora sim, otimize!

●   Se usar threads, crie um método para matar ela
Agora sim, otimize!

●   Se usar threads, crie um método para matar ela

●   Crie um start() e stop() também para sua apli...
Agora sim, otimize!

●   Se usar threads, crie um método para matar ela

●   Crie um start() e stop() também para sua apli...
Agora sim, otimize!

●   Se usar threads, crie um método para matar ela

●   Crie um start() e stop() também para sua apli...
Agora sim, otimize!

●   Se usar threads, crie um método para matar ela

●   Crie um start() e stop() também para sua apli...
Dúvidas
Obrigado!

     Flávio Ribeiro
email@flavioribeiro.com
Referências
http://shreevatsa.wordpress.com/2008/05/16/premature-optimization-is-the-root-of-all-evil/
http://www.dabeaz.c...
Upcoming SlideShare
Loading in …5
×

Desenvolvimento de aplicações embarcadas utilizando Python

3,493 views

Published on

Apresentação sobre dicas de performance e boas práticas para desenvolvimento
de aplicações usando Python em ambientes embarcados.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,493
On SlideShare
0
From Embeds
0
Number of Embeds
359
Actions
Shares
0
Downloads
90
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Desenvolvimento de aplicações embarcadas utilizando Python

  1. 1. Flávio Ribeiro III Encontro do Grupo de Usuários de Python de Pernambuco Abril de 2010
  2. 2. Quem sou? Flávio Ribeiro Trezeano Graduando em Engenharia Elétrica (IFPB) Engenheiro de Software (Avaty! Tecnologia) Python, Sistemas Embarcados, Disp. Móveis, Robótica, Automação http://www.flavioribeiro.com http://www.twitter.com/flavioribeiro email@flavioribeiro.com flavioribeiro @ freenode #python-br
  3. 3. Agenda Conceitos de Sistemas Embarcados Desenvolvimento de Software para esses Sistemas Por que Python? Algumas Dicas :-)
  4. 4. Conceitos de Sistemas Embarcados Sistemas Embarcados são sistemas eletrônicos microprocessados (computadores) encapsulados e dedicados ao dispositivo em que reside e são desenvolvidos para exercer especialmente uma atividade específica.
  5. 5. Conceitos de Sistemas Embarcados ● Escassez em recursos de Processamento, Armazenamento e Autonomia ● Funcionalidade Única, executada repetidamente ● Forte Comunicação com o ambiente ● Propósito de Existência concreto ● Heterogêneos
  6. 6. ● Divertidos de Programar e Manipular!
  7. 7. Desenvolvendo Para esses Sistemas ● Equilíbrio entre legibilidade x qualidade & velocidade do código
  8. 8. Desenvolvendo Para esses Sistemas ● Equilíbrio entre legibilidade x qualidade & velocidade do código ● "Otimização prematura é a raiz de todo mal na programação."
  9. 9. Desenvolvendo Para esses Sistemas ● Equilíbrio entre legibilidade x qualidade & velocidade do código ● "Otimização prematura é a raiz de todo mal na programação." ● Think Embedded
  10. 10. Desenvolvendo Para esses Sistemas ● Equilíbrio entre legibilidade x qualidade & velocidade do código ● "Otimização prematura é a raiz de todo mal na programação." ● Think Embedded ● Conhecimento da plataforma de hardware (capacidade)
  11. 11. Desenvolvendo Para esses Sistemas ● Equilíbrio entre legibilidade x qualidade & velocidade do código ● "Otimização prematura é a raiz de todo mal na programação." ● Think Embedded ● Conhecimento da plataforma de hardware (capacidade) ● Noções de Sistema Operacional e Arquitetura de Computadores
  12. 12. Por que Python? ● Encapsulamento e Controle de Acesso
  13. 13. Por que Python? ● Encapsulamento e Controle de Acesso ● Mais reuso do código!
  14. 14. Por que Python? ● Encapsulamento e Controle de Acesso ● Mais reuso do código! ● Portabilidade
  15. 15. Por que Python? ● Encapsulamento e Controle de Acesso ● Mais reuso do código! ● Portabilidade ● Melhor testabilidade
  16. 16. Por que Python? ● Encapsulamento e Controle de Acesso ● Mais reuso do código! ● Portabilidade ● Melhor testabilidade ● Integração fácil com CC++
  17. 17. Por que Python? ● Encapsulamento e Controle de Acesso ● Mais reuso do código! ● Portabilidade ● Melhor testabilidade ● Integração fácil com CC++ ● Muito divertido de programar
  18. 18. Por que Python? ● Encapsulamento e Controle de Acesso ● Mais reuso do código! ● Portabilidade ● Melhor testabilidade ● Integração fácil com CC++ ● Muito divertido de programar ● Processo de desenvolvimentoteste rápido (no host)
  19. 19. Algumas Dicas
  20. 20. Desacople!
  21. 21. Desacople! Módulos que não interagem entre si não precisam disputar a GIL do processo Python com outros!
  22. 22. Desacople! Módulos que não interagem entre si não precisam disputar o GIL do processo Python com outros! Se sua aplicação tiver muitos serviçosthreads, avalie rodar mais de um processo python com serviços distintos Faça benchmarks com o módulo multiprocessing para versões do CPython que suportam
  23. 23. E o que é o GIL?
  24. 24. Em poucas palavras... GIL – Global Interpreter Lock, é usado para proteger objetos Python de serem modificados entre vários processos de uma vez. Somente o segmento que tem o bloqueio (GIL) pode acessar com segurança os objetos. E o que é o GIL?
  25. 25. “It's simple : threads hold the GIL when running” David Beazley (www.dabeaz.com) E o que é o GIL?
  26. 26. “It limits thread performance” David Beazley (www.dabeaz.com) E o que é o GIL?
  27. 27. David Beazley (www.dabeaz.com) Threads
  28. 28. Threads em Python são implementadas usando o padrão POSIX. Porém... Threads
  29. 29. Threads em Python são implementadas usando o padrão POSIX. Porém... O GIL prejudica muito a performance de threads e programação concorrente. Disputá-la exaustivamente não parece nada bom... Considere utilizar processos fora do interpretador. Threads
  30. 30. Evite o excesso de tratamentos de erro!
  31. 31. Sua classe parece Com algum tipo nativo? Herde-o!
  32. 32. Evite herança múltipla Evite Heranças Múltiplas
  33. 33. Mais dicas... ● Quando testar 'a in b', b deve ser um set ou dicionário ● Concatenação de strings é melhor com ''.join(seq), ao invés de + e += ● Iteradores ao invés de grandes listas ● Variáveis locais são acessadas mais rápidas que variáveis globais ● X = 3 é bem melhor que X = 1 + 2 ● List Comprehensions são bem melhores que for loops ● x,y = a,b é mais lento que x = a; y = b
  34. 34. Agora sim, otimize! Por fim, otimize
  35. 35. Agora sim, otimize! ● Se usar threads, crie um método para matar ela:
  36. 36. Agora sim, otimize! ● Se usar threads, crie um método para matar ela
  37. 37. Agora sim, otimize! ● Se usar threads, crie um método para matar ela ● Crie um start() e stop() também para sua aplicação inteira
  38. 38. Agora sim, otimize! ● Se usar threads, crie um método para matar ela ● Crie um start() e stop() também para sua aplicação inteira ● Use módulos de profiling (cProfile)
  39. 39. Agora sim, otimize! ● Se usar threads, crie um método para matar ela ● Crie um start() e stop() também para sua aplicação inteira ● Use módulos de profiling (cProfile) ● Use o Gprof2Dot para parsear o arquivo de profile
  40. 40. Agora sim, otimize! ● Se usar threads, crie um método para matar ela ● Crie um start() e stop() também para sua aplicação inteira ● Use módulo de profiling (cProfile) ● Use o Gprof2Dot para parsear o arquivo de profile ● Analise a performance e os bottlenecks (gargálos) graficamente :-)
  41. 41. Dúvidas
  42. 42. Obrigado! Flávio Ribeiro email@flavioribeiro.com
  43. 43. Referências http://shreevatsa.wordpress.com/2008/05/16/premature-optimization-is-the-root-of-all-evil/ http://www.dabeaz.com/python/UnderstandingGIL.pdf http://www.dabeaz.com/python/GIL.pdf http://effbot.org/pyfaq/what-is-the-global-interpreter-lock.htm http://www.flickr.com/photos/pewari/105784022/ http://www.flickr.com/photos/randy-shelton/1509012597/sizes/l/ http://wiki.python.org/moin/PythonSpeed http://code.google.com/p/jrfonseca/wiki/Gprof2Dot http://wiki.python.org/moin/PythonSpeed/PerformanceTips http://www.robertostindl.de/multifaces.jpg

×