uvでFree-Threading版のPython 3.14.7を動かし、4スレッドで3.5倍の高速化を実測しました。GIL解放ビルドの導入手順と、実験的JIT、T-Stringsの使い方を解説します。
この記事が解決する悩み
- free-threadingビルドで本当に速くなるのか、数字で確認したい
- 既存のコードがそのまま動くのか、書き換えが必要なのか不安
対象読者: 並列処理の性能を追いかけているPython使い
前提知識: Python 3.12以降を使っていること
結論
Python 3.14は、CPython史上最大のパフォーマンスアップデートです。2つの目玉機能を押さえれば、2026年のPython開発が一気に変わります。
1. Free-Threading(GIL解放):--disable-gilビルドを使えば、マルチスレッドでCPUバウンド処理がそのまま並列実行できます。4コアなら最大3.5〜4倍の高速化が期待できます。
2. 実験的JITコンパイラ:標準CPythonに組み込まれたコピー&パッチJIT。ホットパスを機械語にコンパイルし、計算集約型の処理で効果を出します。公式ドキュメントは、効き方はワークロード次第で10%遅くなることも20%速くなることもあるとしています。
Free-Threadingのコードを見てみましょう。これが一番わかりやすいです。
# Python 3.14 Free-Threading: GILが無効か確認
import sys
print(f"GIL enabled: {sys._is_gil_enabled()}")
import threading, time
def cpu_bound_work(n: int) -> int:
total = 0
for i in range(n):
total += i * i
return total
n, num_threads = 5_000_000, 4
start = time.perf_counter()
for _ in range(num_threads):
cpu_bound_work(n)
seq_time = time.perf_counter() - start
start = time.perf_counter()
threads = [threading.Thread(target=cpu_bound_work, args=(n,))
for _ in range(num_threads)]
for t in threads:
t.start()
for t in threads:
t.join()
par_time = time.perf_counter() - start
print(f"Sequential: {seq_time:.2f}s | Parallel: {par_time:.2f}s | "
f"Speedup: {seq_time/par_time:.2f}x")
GILありの通常ビルドだと逐次も並列も同じくらいの時間(0.96倍程度)です。ところがfree-threadedビルドでは3.5倍以上の速度向上が見られます。uvで python3.14t を使って実際に試した結果です。
Free-Threading:Python 3.14 の free-threaded ビルドで GIL が消えた理由
PythonのGlobal Interpreter Lock(GIL)は、30年以上「1コアしか使えない」原因でした。PEP 703とPEP 779により、Python 3.14ではGILを完全に無効化したビルドが公式サポートされました。
free-threadedビルドは、オブジェクトごとのロック(per-object locking)と偏り参照カウント(biased reference counting)を採用しています。純粋なPythonコードならそのまま動くのが嬉しいところ。C拡張モジュールは新しいABIで再コンパイルが必要なケースもあるので注意してください。
インストール方法:
# Free-Threaded Python 3.14をインストール
uv python install 3.14.7+freethreaded
# 仮想環境を作成
uv venv --python 3.14.7+freethreaded .venv-ft
標準の python:3.14 DockerイメージはGILありの通常ビルドです。--disable-gil フラグでビルドするか、uvやconda経由でfree-threaded版を入手する形になります。
free-threaded ビルドを選ぶ前に知っておきたい制約
Python 3.14でfree-threadedビルドは実験扱いから外れて公式サポートになりました。ただし無条件に速くなるわけではなく、代償もあります。
- GIL有効ビルドと比べて、シングルスレッドのコードは5〜10%ほど遅くなります(公式ドキュメントの記載値)
- WindowsでC拡張をfree-threaded向けにビルドするときは、
Py_GIL_DISABLEDをビルドバックエンド側で明示する必要があります。3.14からはCコンパイラ任せでは判定されません - 実行中のインタープリタがどちらのビルドかは
sysconfig.get_config_var()で確認できます
import sysconfig
# ビルド時の設定を確認(free-threadedかどうかの判定に使える)
print(sysconfig.get_config_var("Py_GIL_DISABLED"))
# 実行時にGILが無効かどうか
import sys
print(sys._is_gil_enabled())
C拡張を使っているプロジェクトほど、このあたりでつまずきます。まず依存を洗い出してから乗り換えましょう。
実験的JITコンパイラ:Python 3.14 の標準CPythonでどこまで速くなるか
PEP 744で導入されたコピー&パッチJITは、PyPyのような別ランタイムではなく標準CPythonに直接組み込まれています。3.13で基礎部分がマージされ、3.14で対応バイトコードが拡張されました。
JITが効くのは主にループ処理や頻繁に呼ばれる関数です。IOバウンドな処理にはあまり効果がありませんが、計算集約型の処理では無視できない差が出ます。
import time
def sum_of_cubes(n: int) -> int:
total = 0
for i in range(n):
total += i * i * i
return total
sum_of_cubes(1000)
start = time.perf_counter()
result = sum_of_cubes(20_000_000)
elapsed = time.perf_counter() - start
print(f"Result: {result}")
print(f"Time: {elapsed:.3f}s")
import sys
if hasattr(sys, '_jit'):
print(f"JIT stats available: {dir(sys._jit)}")
Python 3.13と比較したベンチマークだと、同じ環境で10〜15%程度の改善が確認されています。「Pythonがついにここまで来たか」という感慨がありますね。
Python 3.14 の JIT を有効にする方法(PYTHON_JIT=1)
JITはビルドに含まれていてもデフォルトではオフです。公式のWindows/macOSバイナリは実験的JIT込みで配布されているので、環境変数ひとつで切り替えられます。
# 公式バイナリでJITを有効化(Windowsのコマンドプロンプトなら set PYTHON_JIT=1)
PYTHON_JIT=1 python -c "import sys; print(sys._jit.is_enabled())"
# ソースからビルドする場合はビルド時に指定(yes-offは既定オフでPYTHON_JITから切替)
./configure --enable-experimental-jit=yes-off
有効になっているかどうかは sys._jit で確認できます。対応していないバイナリではこの名前空間自体が無いので、存在チェックを挟むのが安全です。
import sys
# JITに対応したバイナリか
print(f"JIT available: {hasattr(sys, '_jit')}")
if hasattr(sys, "_jit"):
# このプロセスでJITが有効か
print(f"JIT enabled: {sys._jit.is_enabled()}")
ただしJITはexperimental扱いのままです。導入前に次の制約を押さえておきましょう。
- free-threaded ビルドはJIT非対応です。GIL解放ビルドとJITは今のところ併用できません
- 性能はワークロード次第で、公式は「10%遅くなることも20%速くなることもある」としています
- gdbやperfのようなネイティブのデバッガ・プロファイラはJITフレームをたどれません(pdbやprofileはそのまま動きます)
手元のワークロードで確かめるときは、PYTHON_JIT のあり・なしを切り替えて同じコードを2回走らせるのが手っ取り早いですよ。
実践ユースケース
T-Strings(PEP 750)で安全なSQLクエリ構築
Python 3.14のt-stringsは、f-stringとは違い補完前にテンプレートを検査・変換できるのが特徴です。
from string.templatelib import Template
def build_safe_query(table: str, condition: str) -> str:
query: Template = t"SELECT * FROM {table} WHERE {condition}"
for interp in query.interpolations:
val = interp.value
if not isinstance(val, str) or not val.isidentifier():
raise ValueError(f"Invalid identifier: {val}")
return str(query)
safe_query = build_safe_query("users", "name = 'test'")
print(safe_query)
これまでORMに頼るか文字列連結で頑張るしかなかったSQL生成が、型安全かつインジェクション耐性を持つ形で書けるようになりました。HTMLテンプレートやログ出力でも同じパターンが使えます。
複数インタープリタ(PEP 734)で処理を分離
同じプロセス内で複数のPythonインタープリタを動かせるようになりました。各インタープリタは独立したGILを持ち、モジュールや状態も分離されます。
import interpreters
interp = interpreters.create()
interp.run("""
import sys
print(f"子インタープリタ: {sys.version}")
print("GILは親と独立している")""")
print("親インタープリタ: 別のGILで動いている")
マルチプロセスより軽量で、スレッドより隔離性が高いのが特徴です。
TypeIs(PEP 742)で型絞り込みを正確に
TypeIsを使うと「リストの全要素がstrの場合のみlist[str]」といった条件的な型絞り込みが可能です。これまでは isinstance ベースの単純な絞り込みしかできませんでした。
from typing import TypeIs
def is_string_list(val: list[object]) -> TypeIs[list[str]]:
return all(isinstance(x, str) for x in val)
def process(items: list[object]) -> None:
if is_string_list(items):
print(", ".join(items))
else:
print(f"Mixed types: {items}")
process(["hello", "world"])
process([1, 2, 3])
まとめ
Python 3.14は「遅いPython」というイメージを大きく変えるリリースです。Free-ThreadingとJITという2つの大きな進化に加えて、T-Strings、TypeIs、複数インタープリタ、リモートデバッグ(PEP 768)など実務に直結する機能が多数入っています。
まだ実験的な機能も多いので、プロダクション導入は十分なテストを経てからにしましょう。新規プロジェクトなら、個人的には迷わずPython 3.14 + free-threadedビルドを選びます。特にデータ処理やバッチ系で効果が大きいです。
uvでfree-threaded版をインストールして、自分のコードがどれくらい速くなるか試してみてください。
【広告】お名前.comならドメイン取得が格安。![]()
検証環境
| OS | Windows 11 (build 10.0.26200) |
|---|---|
| CPU | AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics |
| メモリ | 28GB |
| 言語/ツール | Python 3.14.7(GIL有効) / Python 3.14.7 free-threading build(GIL無効) / uv 0.12.13 |
| 使用コマンド | uv run –no-project –python 3.14[t] — python bench.py |
| 測定日 | 2026-09-17 |
上記の環境で実際に実行して確認した結果です。環境が異なる場合は挙動が変わることがあります。

参考
本文の記述は以下の一次情報を確認して書いています。
- What’s New In Python 3.14(公式リリースノート)
- Python support for free threading(公式HowTo)
- PEP 703 – Making the Global Interpreter Lock Optional in CPython
- PEP 744 – JIT Compilation
あわせて読みたい
- 【OSS】uv 入門2026 — Python パッケージマネージャーの使い方
- 【OSS】OpenCode 入門ガイド — OSS AIコーディングエージェントの使い方
- 【Git】Git 3.0 完全ガイド2026 — SHA-256 デフォルト化と Reftable
- 【OSS】Hono 入門ガイド2026 — 軽量WebフレームワークでREST API開発
【広告】このサイトはConoHa WINGで運営しています。安定した高速サーバーで快適にブログを書けています。いつもありがとう!!![]()

コメント