Python 3.13: Multithread de verdade

O lançamento do Python 3.13 marca um grande passo para a linguagem com uma série de melhorias significativas, incluindo o tão aguardado suporte experimental a threads livres, conhecido por muitos como no-GIL (Global Interpreter Lock). Este avanço abre portas para novos níveis de concorrência, eliminando o bloqueio global que tradicionalmente limitava a eficiência do Python em cenários multithread. Além disso, o Python 3.13 traz novas funcionalidades de desempenho, aprimoramentos no compilador e na tipagem, e a remoção de APIs obsoletas.
Neste artigo, exploraremos os principais destaques dessa nova versão, com ênfase no uso de threads livres, como instalar essa funcionalidade e como ela impacta a performance, comparando-a com a versão padrão com GIL. Também abordaremos outras melhorias que fazem do Python 3.13 uma atualização essencial para desenvolvedores.
O Que é o GIL?

O GIL (Global Interpreter Lock) é uma trava que impede que múltiplas threads executem código Python simultaneamente, mesmo em máquinas com múltiplos núcleos. Isso significa que, embora o Python tenha suporte a threads, elas não podiam ser executadas em paralelo, limitando o uso eficiente de CPU. O GIL sempre foi um ponto de discussão para desenvolvedores que precisavam de mais desempenho em aplicações concorrentes.
Com o suporte experimental a threads livres (sem GIL), o Python 3.13 finalmente permite que threads rodem paralelamente, melhorando a performance em tarefas de CPU-bound, onde há grande demanda por processamento. Isso é especialmente útil em aplicações como análise de dados em larga escala, jogos, ou qualquer outro cenário de alta concorrência.
Como Instalar e Usar o Python 3.13 com Suporte a Threads Livres
Atualmente, o suporte a threads livres está disponível como uma versão experimental, o que significa que ele não está habilitado por padrão. Para instalá-lo, siga os passos abaixo:
- Instalar a versão sem GIL: Você precisará baixar e compilar uma versão especial do Python 3.13. Isso pode ser feito clonando o repositório do Python e habilitando o suporte ao modo sem GIL.
git clone https://github.com/python/cpython
cd cpython
./configure --disable-gil
make
sudo make install
- Testar sua instalação: Após a instalação, você pode verificar se o suporte sem GIL está ativo executando o seguinte código:
import sys
print(sys.version)
print("Thread support without GIL: ", sys.thread_info)
Instalação com PyEnv
Uma opção mais simples para testar esse suporte experimental, é com o uso do PyEnv, que é uma ferramenta que permite a instalação de múltiplas versões do python simultaneamente. Para instalação da versão padrão (com GIL), use o comando pyenv install 3.13
, e para instalar a versão sem o GIL utilize o comando pyenv install 3.13t
.
Comparação de Performance: Python com GIL vs. Sem GIL
A grande diferença em desempenho entre o Python com e sem GIL pode ser observada em aplicações que fazem uso intensivo de threads, e que possuam uma característica CPU-Bound. Vamos ver um exemplo simples que simula uma carga de trabalho que utiliza múltiplas threads.
Aqui está um código que simula um cálculo intensivo de CPU em múltiplas threads:
import threading
import time
def compute():
start_time = time.time()
result = 0
for i in range(10**8):
result += i
print(f"Result: {result}, Time taken: {time.time() - start_time} seconds")
threads = []
for _ in range(8):
thread = threading.Thread(target=compute)
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
Na versão com GIL, você perceberá que, apesar de usar múltiplas threads, o tempo de execução não é otimizado, pois o GIL impede a execução paralela real.
Com o GIL removido, as threads podem ser executadas em paralelo em múltiplos núcleos, resultando em um tempo de execução significativamente menor. O código agora tira proveito do poder de processamento multicore de CPUs modernas.
Resultados
- Com GIL: Executando o código anterior utilizando a versão normal (Com GIL) tivemos uma média de 36 segundos de processamento, a saída foi a seguinte:
Result: 4999999950000000, Time taken: 35.86664700508118 seconds
Result: 4999999950000000, Time taken: 36.83888268470764 seconds
Result: 4999999950000000, Time taken: 37.35259485244751 seconds
Result: 4999999950000000, Time taken: 37.227311849594116 seconds
Result: 4999999950000000, Time taken: 37.30231475830078 seconds
Result: 4999999950000000, Time taken: 37.24745798110962 seconds
Result: 4999999950000000, Time taken: 37.498384952545166 seconds
Result: 4999999950000000, Time taken: 37.55902409553528 seconds
- Sem GIL: Ao utilizar a versão sem GIL, notamos uma significativa diferenteça de performance, com uma média próxima dos 6 segundos.
Result: 4999999950000000, Time taken: 6.3768150806427 seconds
Result: 4999999950000000, Time taken: 6.38716197013855 seconds
Result: 4999999950000000, Time taken: 6.42031717300415 seconds
Result: 4999999950000000, Time taken: 6.432363033294678 seconds
Result: 4999999950000000, Time taken: 6.43943977355957 seconds
Result: 4999999950000000, Time taken: 6.457244873046875 seconds
Result: 4999999950000000, Time taken: 6.467781066894531 seconds
Result: 4999999950000000, Time taken: 6.605498790740967 seconds
Essa melhoria tem um impacto direto em qualquer aplicação que se beneficie de concorrência, como servidores web de alta performance, jogos, ferramentas de processamento de dados em larga escala, entre outros.
Outras Melhorias Importantes no Python 3.13
Além do suporte experimental a threads livres, o Python 3.13 também inclui várias outras melhorias:
- Compilador JIT Experimental: Um compilador just-in-time (JIT) foi introduzido para melhorar o desempenho de determinadas operações. Embora ainda seja experimental, ele promete acelerar código Python em cenários onde o desempenho é crítico.
- Melhorias na Tipagem: O Python 3.13 introduz suporte a parâmetros de tipo com valores padrão, permitindo maior flexibilidade ao definir tipos genéricos. Esse recurso simplifica a criação de bibliotecas e APIs que utilizam tipagem estática.
- Mensagens de Erro Aprimoradas: Mensagens de erro agora são mais claras e detalhadas, com realce de sintaxe colorida, o que torna a depuração de código muito mais amigável.
- Remoção de APIs Obsoletas: O Python 3.13 removeu várias APIs legadas, como o módulo
2to3
, que auxiliava na migração de código Python 2 para 3. Essas remoções tornam o código mais limpo e menos propenso a vulnerabilidades e problemas de manutenção. - Desempenho Geral Melhorado: Diversas otimizações menores foram feitas ao longo do interpretador, incluindo melhorias na coleta de lixo e otimizações no gerenciamento de memória, resultando em um Python mais rápido e eficiente.
Considerações Finais
O Python 3.13 é uma versão importante, trazendo grandes avanços em concorrência e desempenho. O suporte experimental a threads livres sem o GIL abre novas possibilidades para a linguagem, especialmente em aplicações que precisam explorar múltiplos núcleos da CPU. Embora ainda em fase experimental, esse recurso certamente será refinado nas próximas versões.
Se você trabalha com aplicações concorrentes ou CPU-bound, vale a pena experimentar o Python 3.13 sem GIL e explorar as melhorias em desempenho. Para desenvolvedores em geral, as outras melhorias no compilador, tipagem e mensagens de erro tornam essa atualização uma excelente escolha para qualquer projeto.
Explore mais detalhes no site oficial e experimente a nova versão!