Agora é um bom momento para contribuir com o Python Free Threading
Na PyCon US 2025, vou fazer um breve resumo do que entendi até agora sobre o Python Free Threading e também organizar algumas ideias sobre como contribuir.
O que é o Python Free Threading?
Python Free Threading é um projeto que tem como objetivo remover o GIL (Global Interpreter Lock) do Python para melhorar o desempenho em ambientes multithread. O projeto foi iniciado para melhorar o desempenho de multithreading no Python e oferecer melhor performance em tarefas CPU-bound.
Ainda está em fase experimental, e é preciso recompilar para instalar ou fazer a instalação via uv.
Situação atual
Eu também só fiz alguns testes, mas dizem que a maioria das bibliotecas puramente em Python funciona sem problemas. No entanto, muitas das bibliotecas mais usadas em geral recorrem a bibliotecas em C/C++ por questões de desempenho ou implementação, ou são implementadas diretamente como extensões. Por isso, para usar essas bibliotecas com Python Free Threading, é preciso adotar várias abordagens.
No caso de usar módulos de extensão
Na maioria dos casos, usam-se os métodos abaixo, e existe um guia de portabilidade.
- C API
- Cython
- PyBind11
- nanonbind
- PyO3
- f2py
O CFFI ainda não tem suporte, mas é possível usá-lo por meio do fork da Quansight.
Existe uma issue dizendo que não haverá suporte, mas como o CFFI é usado principalmente para interfaceamento, dá para entender essa decisão. Se usar o CFFI com fork, dá para usar Python Free Threading, mas como não é uma implementação refinada, a performance provavelmente cai.
Como contribuir
Daqui em diante parece que estamos nos jogando num buraco fundo, mas quando participei do sprint, todo mundo estava bastante positivo, então ainda parece um bom momento para contribuir. As formas de contribuir são as seguintes.
Verifique, com base no material abaixo, se a compatibilidade com free-threading-python está boa
- Free-threaded Python Library Compatibility Checker
- 🧵 Free-Threaded Wheels
- Compatibility Status Tracking#
Depois de testar, registre uma issue
Primeiro instale o Python 3.13 free-threading, depois instale a biblioteca e rode os testes.
Se possível, vale a pena testar também a versão 3.14t, mas como ainda está em beta, é melhor começar pela 3.13.
Faça o porting e envie um PR
Daqui para frente fica um pouco difícil. É preciso ter algum entendimento de multithreading, várias system calls, C/C++ e também do funcionamento interno do Python.
A parte mais difícil é que muitas bibliotecas têm dependências entre si. Então, ao usar outras bibliotecas, se a dependência em questão ainda não tiver suporte, é preciso começar por ela.
Eu também só consegui ter uma noção geral ao participar do sprint, mas fica mais ou menos assim.
- fastapi -> uvicorn -> uvloop, cryptography, pycares
Escreva um texto sobre como contribuir
É o que estou fazendo agora, embora ainda esteja incompleto. Vamos escrever e publicar em vários lugares.
Escreva sobre como usar o free-threading-python
Como ainda faltam textos nesse tema em coreano, é uma boa fazer testes de desempenho, explicar o uso, organizar tudo e publicar em forma de artigo.
Por que contribuir agora
Acho que já faz um pouco mais de 25 anos que estou no ecossistema de software livre. Não sou um grande contribuidor de open source, mas tenho muitos conhecidos que contribuem bastante, inclusive dois CPython Core Developers, além de várias outras pessoas. Por causa disso, conversando com esse pessoal, fui desenvolvendo uma certa intuição.
É bom contribuir quando ainda não há nada ou quando se está em um período de grande transformação. Por exemplo, a Jang Hye, que contribuiu no começo do Python, fez muitas outras coisas, mas também trabalhou com Unicode e codecs coreanos. Naquela época não havia praticamente nada, e como os principais contribuidores não conheciam codecs coreanos, imagino que era relativamente mais fácil entrar nessa área. Depois, a transformação seguinte veio na migração para o Python 3. Mais tarde, houve a parte de asyncio, e dessa fase me lembro do Kim Jun-gi, além de muitas outras pessoas. E agora surgiu mais uma nova funcionalidade: free-threading. Eu acho que este é o melhor momento para contribuir.
No caso de outras linguagens, as mudanças costumam ser decididas por empresas ou em frameworks já administrados por grandes corporações, então não é algo fácil. Claro que no Python também não é extremamente fácil de acessar, mas existem inúmeras bibliotecas e frameworks, e agora é possível portar tudo, um por um. Como ainda é preciso muita gente para isso, este é exatamente o momento.
12 comentários
Um dos grandes motivos da popularidade do Python foi justamente não precisar se preocupar nem com esse tipo de multithreading. Se tiver que levar isso em conta também, vai acabar virando uma linguagem que pessoas comuns não conseguem usar com facilidade.
Ainda é um recurso opcional, e há uma grande chance de que o multithreading continue sendo opcional. (ativando a opção, fazendo uma instalação separada etc.)
Eu também quase não uso Type, e acho que vou usar
free-threadingpor causa de questões de desempenho, mas de forma bem limitada.Não estamos tratando isso como algo opcional. Depois que a PEP 779 for aprovada, o objetivo é mudar a implementação padrão no futuro para free-threaded.
A intenção era algo como: será que não dá para usar sem pensar muito, como
type? Hehe.free threading pythonrealmente não parece ser nada fácil. Dá uma sensação de estar abrindo a caixa de Pandora. Há a possibilidade de todo tipo de bug de sincronização que ficou escondido até agora começar a aparecer. E ainda por cima só explodindo no runtime, bem de vez em quando. Aqueles problemas que já davam dor de cabeça no desenvolvimento com multithreading talvez agora também comecem a se tornar sérios de vez no Python. Mesmo olhando só para a família C, trechos que usam funções que não são thread-safe já devem causar problemas imediatamente.Seria ótimo se aparecesse um agente que fizesse a portabilidade e os testes automaticamente!
Como é uma questão de multithread, não vai ser fácil.
Dá para instalar facilmente pelo deadsnakes ou pelos instaladores oficiais do Windows e do macOS, sem precisar compilar por conta própria!
Tem muitos erros de digitação. T_T Não consegui atualizar aqui, então deixei a atualização no blog.
Olá, entrei em contato porque este post apareceu em uma recomendação do Google. Trabalhei 5 anos como desenvolvedor Python no exterior (13 anos em desenvolvimento no geral) e, no momento, estou dando uma pausa na Coreia. Quero contribuir... você poderia, por acaso, me passar um e-mail? Gostaria de entrar em contato e aprender sobre isso aqui.
Meu e-mail é josephroh@naver.com. Obrigado.
Enviei um e-mail. Obrigado.