Simon Willison→ original

Python 3.15 chega com lazy imports, profiler Tachyon e JIT 1,2x mais rápido

O Python 3.15 foi lançado. Os destaques são os imports preguiçosos explícitos (PEP 810), o desempacotamento em comprehensions (PEP 798) e o profiler de amostragem Tachyon, embutido no módulo profiling.sampling. Em velocidade, a versão quase não difere da 3.14, mas o JIT experimental chegou a 1,2x no teste com números de Fibonacci (medição de Miguel Grinberg no 3.15.0rc3). Com a chegada do 3.15, o Python 3.10 perdeu oficialmente o suporte. Para quem mantém bibliotecas, isso significa que a versão mínima pode passar a ser o 3.11. • Os lazy imports reduzem o tempo de inicialização de utilitários de linha de comando (CLI). • O Tachyon substitui profilers externos como o py-spy. • O Python 3.10 não é mais suportado.

Processado por IA de Simon Willison; editado por Hamidun News
Python 3.15 chega com lazy imports, profiler Tachyon e JIT 1,2x mais rápido
Fonte: Simon Willison. Colagem: Hamidun News.
◐ Ouvir artigo

O Python 3.15 foi lançado. Para a maioria dos desenvolvedores, três pontos se destacam: os imports preguiçosos (lazy imports) explícitos, o profiler Tachyon na biblioteca padrão e a nova sintaxe de desempacotamento em list comprehensions. A velocidade do interpretador quase não mudou em relação ao 3.14, mas o JIT experimental mostrou pela primeira vez um ganho perceptível: 1,2x. Além disso, o Python 3.10 (2021) perdeu oficialmente o suporte. Para quem mantém bibliotecas, isso pesa mais do que qualquer sintaxe nova: o piso de compatibilidade sobe para o 3.11. O resumo das mudanças para o «What's new» deste ano ficou a cargo de Hugo van Kemenade, release manager das versões 3.14 e 3.15.

Lazy imports, desempacotamento e Tachyon

A novidade mais prática é a PEP 810. Agora é possível declarar um módulo assim: `lazy import json` ou `lazy from pathlib import Path`. O import de fato só acontece no primeiro acesso ao símbolo. O desenvolvedor Simon Willison, autor do utilitário de linha de comando LLM, que tem sistema de plugins, convive com esse problema há tempos. Plugins com dependências pesadas, como `sentence_transformers`, adicionavam vários segundos a cada chamada do comando `llm`. Na documentação para autores de plugins, ele precisava recomendar lazy imports feitos à mão. Agora a própria linguagem resolve isso.

A segunda mudança é a PEP 798, de Adam Hartz e Erik Demaine. Ela adiciona desempacotamento dentro de comprehensions: `[L for L in lists]` transforma uma lista de listas em uma lista plana, `{s for s in sets}` une conjuntos e `{**d for d in dicts}` mescla dicionários. A proposta dá continuidade à PEP 448, que chegou ao Python 3.5 em 2015.

A terceira novidade são os profilers. O `cProfile`, o profiler de tracing que todo mundo conhece, foi renomeado para `profiling.tracing`. Ao lado dele surgiu o `profiling.sampling`, o Tachyon, que usa amostragem. Ele captura periodicamente as pilhas de um processo em execução e calcula onde o tempo é gasto. O overhead é baixo e não é preciso instrumentar o código com antecedência. Até agora, era necessário instalar ferramentas externas como o py-spy para isso. Agora o recurso vem na biblioteca padrão.

No exemplo do resumo de mudanças, o profiler coletou 2 651 amostras em 2,65 segundos, a uma taxa de cerca de 1000 por segundo. O resultado mostra com clareza que o processo passou quase todo o tempo ocioso, esperando o event loop do asyncio. É possível exibir o resultado como flame graph e heat map, além de exportá-lo no formato da interface do Firefox Profiler. No macOS, foi preciso usar `sudo` para se conectar ao processo pelo PID.

Velocidade: o JIT enfim aparece

Não convém esperar aceleração «de graça». Miguel Grinberg comparou o 3.15.0rc3 com o 3.14 e concluiu que o desempenho, em geral, continuou o mesmo. A exceção é o JIT experimental.

  • JIT contra o interpretador padrão do 3.15: 1,2x no teste de Fibonacci.
  • É a primeira vez que Grinberg vê um ganho significativo com o JIT.
  • Para comparação: no ano passado, o 3.14 superou o 3.13 com folga em um número muito maior de categorias.
  • Profiler Tachyon: cerca de 1000 amostras por segundo, sem instrumentação prévia.

Como atualizar e o que muda sem o 3.10

Quem usa o `uv` precisa de poucos comandos para migrar. Primeiro, é preciso atualizar a própria ferramenta para que ela reconheça o novo lançamento: `uv self update`. Depois, instala-se o interpretador: `uv python install 3.15`. Para torná-lo a versão padrão em qualquer `uv run` cujo projeto não fixe outra, basta executar `uv python pin --global 3.15`. Para verificar: `uv run python --version`. Utilitários já instalados são reinstalados com a versão desejada, por exemplo `uv tool upgrade datasette --python 3.15`.

Para quem mantém bibliotecas, o lado mais interessante é o inverso. A política de Willison é suportar todas as versões vivas do Python. Como o 3.10 não é mais suportado, já é possível contar com recursos do 3.11:

  • `tomllib` na biblioteca padrão;
  • `asyncio.TaskGroup` e `asyncio.timeout()`;
  • `datetime.UTC` como alias de `datetime.timezone.utc`;
  • no `sqlite3`, `setlimit()`/`getlimit()`, `create_window_function()`, `blobopen()` para leitura parcial de BLOBs grandes e `set_authorizer(None)` para remover o autorizador;
  • um sistema de tipos bem ampliado.

No Datasette, o primeiro PR (nº 2998) já remove a solução alternativa para `set_authorizer(None)`. Os templates do cookiecutter para click-app, datasette-plugin, python-lib e llm-plugin agora são testados nas versões de 3.11 a 3.15. A conclusão prática para o seu projeto: revise a matriz de CI, remova o 3.10 e adicione o 3.15. Vale testar os lazy imports primeiro em ferramentas de linha de comando com dependências pesadas. Ali, o ganho no tempo de inicialização aparece de imediato.

ZK
Hamidun News
Notícias de AI sem ruído. Seleção editorial diária de mais de 50 fontes. Produto de Zhemal Khamidun, Head of AI na Alpina Digital.
✦ Unified AI Workspace

Access Frontier LLMs & Multimodal AI in One Workspace

Discover NomadNet AI (nomadnet.ai) — unified access to frontier language models, research synthesis, and multimodal workflows.

Try NomadNet AI →Launch NomadNet Agent
O que você acha?
Carregando comentários…