Le mode free-threaded dans Python 3.14

Python 3.14 marque une étape historique : le mode free-threaded (sans GIL) est officiellement supporté. L'interpréteur peut désormais exécuter plusieurs threads Python en parallèle sur plusieurs coeurs, sans le verrou global (GIL) qui limitait le parallélisme réel.

Comment l'activer

Le mode free-threaded nécessite un build spécifique de CPython. Les installeurs officiels proposent cette variante. On peut vérifier le mode actif avec sys.flags.

python
import sys
import sysconfig

# Vérifier si le GIL est désactivé
print(sys._is_gil_enabled())  # False en mode free-threaded

# Vérifier le suffixe ABI (t = free-threaded)
suffix = sysconfig.get_config_var('SOABI')
print(suffix)  # cpython-314t-x86_64-linux-gnu
#                            ^ 't' = free-threaded

Exemple : parallélisme réel avec threads

Avec le GIL désactivé, les threads CPU-bound s'exécutent réellement en parallèle. L'accélération est quasi-linéaire avec le nombre de coeurs pour du calcul pur.

python
import threading
import time


def calcul_intensif(n: int) -> int:
    """Somme des carrés de 0 à n."""
    total = 0
    for i in range(n):
        total += i * i
    return total


N = 10_000_000

# Exécution séquentielle
start = time.perf_counter()
for _ in range(4):
    calcul_intensif(N)
seq = time.perf_counter() - start

# Exécution parallèle avec threads
start = time.perf_counter()
threads = [threading.Thread(target=calcul_intensif, args=(N,)) for _ in range(4)]
for t in threads:
    t.start()
for t in threads:
    t.join()
par = time.perf_counter() - start

print(f"Séquentiel : {seq:.2f}s")
print(f"Parallèle  : {par:.2f}s")
print(f"Accélération : {seq / par:.1f}x")
# Avec free-threaded : ~3.5x sur 4 coeurs
# Avec GIL classique : ~1.0x (pas d'accélération)

Sources