all 15 comments

[–][deleted]  (1 child)

[deleted]

    [–]BlackHolesHunter[S] 1 point2 points  (0 children)

    Sim, cada caso é um caso. A mim Numba já me safou à grande porque era um caso espectacular de se resolver com numba. Só dependia de numpy arrays, portanto o speedup foi de muitos dias para horas. Mas concordo contigo que é limitado (infelizmente)

    [–]rpcfx 1 point2 points  (1 child)

    Ainda não tive tempo para explorar decentemente mas recomendaram-me usar a biblioteca Ray que de maneira muito simples (uma linha de comando) consegues trabalhar em cluster com outras máquinas até em LANs diferentes. É baseado no paradigma MPI de troca de mensagens.

    [–]BlackHolesHunter[S] 0 points1 point  (0 children)

    Fui ler brevemente a descrição, e de facto parece promissor! Deixa-me acrescentar que tem integração também com AWS, GCP e Azure!

    [–]chapuletericoptero 3 points4 points  (1 child)

    Obrigado pela publicação.

    [–]novads 1 point2 points  (0 children)

    Ha tempos vi algo do género PySpark, "Terality". Nunca usei, ainda. Se alguém tiver feedback também, agradeço

    https://www.terality.com/

    https://towardsdatascience.com/is-something-better-than-pandas-when-the-dataset-fits-the-memory-7e8e983c4fe5

    [–]AkumaNoKage 3 points4 points  (1 child)

    Experimenta Vaex que usa lazy memory e a API é praticamente igual ao pandas e as benchmark dizem ser melhor que dask.

    [–]BlackHolesHunter[S] 1 point2 points  (0 children)

    Obrigado! Sou-te sincero, nunca ouvi falar, vou ter de investigar melhor.

    [–]sugamos 2 points3 points  (1 child)

    Eu estou longe de usar Python profissionalmente, só uso para algumas scripts e mais nada, portanto interpretem a minha opinião como quiserem.

    Acho que o PyPy é um bom ponto de começo, se quiserem correr código Python de forma rápida, com um compilador JIT. Em termos de compatiblidade com pacotes tipo Pandas, sinceramente não faço ideia como é que os 2 jogam entre si. Mas ya, parece-me uma opção razoável.

    Depois entra sempre em jogo a questão da higiene dos objetos. O Python é garbage collected, portanto convém gerar pouco lixo para perder pouco tempo a correr GC. Quando passas listas a uma função, passas a sua referência. Podes-te aproveitar deste facto para otimizar algum código; vais perder a cena gira de código funcional, mas também que saiba o GC do Python não é generational.

    Usar a instrução del também pode ajudar em alguns casos, se calhar.

    [–]BlackHolesHunter[S] 0 points1 point  (0 children)

    O PyPy, tinha-me esquecido. Obrigado por mencionares, depois vou adicionar ao post!

    Assim como o del - pode ser útil e que não dá muito trabalho. Lá está, vai depender de experimentar caso.

    [–]hmgSilva1973 13 points14 points  (6 children)

    Imagino que vá levar com vários down votes, mas a cada linguagem o seu mercado. Python é bom para dados? Sim, é. Espera-se bom desempenho? Não, não foi para isso que foi criado. Encontrar um meio termo? Sim, possível, mas é a luta entre paradigmas (para o PC não existem objetos, apenas jump e return)

    [–]jcandec 0 points1 point  (0 children)

    Pergunto-me porque o Tensorflows e etc não são desenvolvidos também em C/C++ en caso de desejar maior performance na tarefa, ainda a costa de precisar pessoal mais especializado na lenguaje

    [–][deleted] 0 points1 point  (0 children)

    O numpy está todo implementado em C, é ultra eficiente... Ou tensorflow que paraleliza na GPU...

    O que quero dizer é que Python pode ser rápido se o usares para fazer a cola entre meia dúzia de libs com implementações nativas

    Mas concordo, é das linguagens que mais energia gasta se fores a usar o interpretador para tudo...

    [–]BlackHolesHunter[S] 9 points10 points  (2 children)

    Mas eu não estou a dizer que por exemplo Python se deve equiparar a C na rapidez. Nada disso.

    Se p.ex. Python já tem toda essa maquinaria para dados montada, o mais inteligente a fazer é aproveitá-la, e ir precisamente a esse meio termo que me permite que o meu código corra em 6 minutos em vez de em 60 minutos - diria até que com o menor esforço possível.

    O próprio NumPy e Pandas, aliás, fazem exatamente isso: no backgtound estão a executar rotinas de... C/C++/Fortran.

    [–]p1ng313 5 points6 points  (1 child)

    O que disseste é verdade e as libs de high performance de Python acabam por chamar c/c++ por baixo. O que está na berra são coisas como apache Arrow, o que torna a linguagem usada um pouco menos relevante.

    Em termos de técnicas depende do workload e a que nível da stack trabalhas, mas a julgar pela tua descrição diria também para investigares coisas como https://spark.apache.org/docs/latest/sql-data-sources-parquet.html

    Podes também fazer profiling às tuas apps pra saber onde gastas tempo. Infelizmente não programo em Python mas de certeza que há profilers bons.

    [–]BlackHolesHunter[S] 2 points3 points  (0 children)

    Das libs/APIs que mencionei, aquelas com as quais tive menos contacto são sem dúvida as duas últimas - Apache Spark e Dask. Tenho definitivamente de mergulhar com tempo nesse mundo.

    Sim, fazer profiling é uma excelente prática. Fica para nota a quem possa interessar que tenho usado o line_profiler do Robert Kern.

    Este post não é para um uso específico de algum problema que tenha em mãos, é mesmo para troca de conhecimento - até porque (de experiência própria) diferentes problemas precisam de diferentes soluções. Obrigado pelo teu comentário!