Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A linguagem Go pode ajudar o Python a ter mais performance?

A linguagem Go pode ajudar o Python a ter mais performance?

Go pode ajudar o Python a ter mais performance?

https://github.com/rafaelhenrique/go-improves-python

Transcript

  1. A linguagem Go pode ajudar o Python a ter mais

    performance? Vantagens? Desvantagens?
  2. Eu Rafael Henrique da Silva Correia @rafaelhenrique http://blog.abraseucodigo.com.br - Desenvolvedor

    Python na Olist (temos vagas!) - Aprendiz de Golang - Coordenador/Organizador Grupy-SP (Sorocaba) - Rogue em World of Warcraft
  3. Motivação Tentar fazer o que o Bruno Rocha fez com

    Rust porém com Golang: https://github.com/rochacbruno/rust-python-example
  4. Python e suas características principais - Tipagem forte e dinâmica

    - Multiparadigma - Interpretada - Possui garbage collector - Suporta concorrência e paralelismo - Open Source e “de grátis”
  5. Go e suas características principais - Estaticamente tipada - Compilada

    - Possui garbage collector - Suporta concorrência (gorotines/channels) - Suporta P.O.O. (mas é e não é uma linguagem O.O.) [1] - Open Source e “de grátis” [1] https://golang.org/doc/faq#Is_Go_an_object-oriented_language
  6. E agora começa o amor! É possível programar em Go

    e não virar hater Python … … É também possível programar em Python e não virar hater Go
  7. Como fazer um código em Go rodar em Python? $

    go help buildmode … -buildmode=c-shared Build the listed main package, plus all packages it imports, into a C shared library. The only callable symbols will be those functions exported using a cgo //export comment. Requires exactly one main package to be listed. …
  8. O que é cgo? cgo não é Go! O cgo

    é uma tecnologia incrível que permite aos programas Go interoperar com bibliotecas C. É um recurso tremendamente útil sem o qual o Go não estaria na posição atual. O cgo é a chave para a capacidade de executar programas Go no Android e no iOS. Fonte: https://dave.cheney.net/2016/01/18/cgo-is-not-go Esta prática traz uma série de tradeoffs, use e pense com carinho antes de usar!
  9. O “experimento” Dada uma grande base de CNPJs [1] encontrar

    o CNPJ de uma empresa a partir do seu nome completo. O formato do arquivo segue este padrão: [1] http://bit.ly/dados-abertos-do-cnpj
  10. Fazendo isso em Python... https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  11. Versão 1: Python utilizando Regex (search) https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  12. Versão 2: Python utilizando Regex (findall) https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  13. Versão 3: Python utilizando in https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  14. Fazendo isso em Golang... https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  15. Versão 1: Go utilizando Regex https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  16. Versão 2: Go utilizando Contains https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  17. Como usar essas funções Go no Python? $ go build

    -buildmode=c-shared -o gofindcnpj.so main.go
  18. Como usar essas funções Go no Python? https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  19. Como usar essas funções Go no Python? https://gist.github.com/rafaelhenrique/1d064ab71ee7d3de5cd04be1f4582e50

  20. Como medir velocidade/desempenho? $ pip install pytest-benchmark $ pip install

    pytest-benchmark[histogram] $ pip install memory-profiler
  21. Como medir velocidade/desempenho?

  22. Live Demo ….. https://github.com/rafaelhenrique/go-improves-python

  23. Conclusões find_cnpj • Realizar varreduras com regex em Go é

    muito menos performático do que em Python (metade do tempo basicamente), suponho que em Rust o resultado seja melhor ainda • Com a base de CNPJs completa Go tem mais performance • Com a base de CNPJs reduzida Python tem mais performance • Uso de memória RAM se manteve em todos os casos Versão nativa: go-improves-python/tree/regex-python-vs-golang Resultados de benchmark: go-improves-python/tree/master/find_cnpj/benchmark-results
  24. A linguagem Go pode ajudar o Python a ter mais

    performance? R: SIM! Mas é claro que tudo depende da natureza do problema! Testes são necessários.
  25. Referências • Temos vagas na Olist: https://www.99jobs.com/olist • São muitas,

    acessem aqui: https://bit.ly/go-improves-python-references
  26. Agradecimento

  27. Obrigado! Perguntas!? Rafael Henrique da Silva Correia @rafaelhenrique http://blog.abraseucodigo.com.br https://speakerdeck.com/rafaelhenrique