いよいよPython 3.14.0が正式リリースされた。その新機能の中からフリースレッド版Pythonが公式サポートされるようになるまでの道のりと今後の展望について、ドキュメントを基に簡潔にまとめる。
2025年10月7日に正式リリースされたPython 3.14の新機能や変更点を記した「What's new in Python 3.14」ではリリースハイライトの先頭に「PEP 779: Free-threaded Python is officially supported」とある(以下では「Free-threaded Python」を「フリースレッド版Python」と表記する)。
フリースレッド版Pythonは、複数あるCPUコアを活用することで、Pythonの並列処理性能を大きく上昇させる。これはPythonにとっての大きな進化となる。以下では幾つかのPEPとそれらを受理/承認するアナウンスを基にフリースレッド版Pythonがどのような経路を経て、公式サポートに至ったか、これから先の展望はどうなっているのかをまとめる。
フリースレッド版Pythonとは、Pythonで並列処理を実現する上での足かせとなってきたGIL(Global Interpreter Lock)を無効化したPython処理系のことである。
1990年代初頭にGILが導入された時点では、PCのCPUはシングルコアが当たり前の時代であり、マルチコアなCPUを使って、CPUに強く依存する処理を並列に実行することは想定されていなかった。そうした中で、Pythonでマルチスレッド処理を行う際に競合状態やデッドロックを避けるためのシンプルな方策として導入されたのがGILといえる。
GILは「Pythonで書かれたマルチスレッドで動作するコードを実行する場合、同時に実行されるPythonコードは1つだけ」という制約をもたらす。上で述べたような競合状態やデッドロックの心配は減るが、CPUが持つ複数のコアを活用して、計算などの処理を並列に行いたいというときには逆に足を引っぱることになる。マルチコアCPUが一般的になった現在では、これはPythonが持つ足かせとなりつつあったことから、脱GILが段階的に進められていくことになった。
脱GIL化の取り組みはPEP 703「Making the Global Interpreter Lock Optional in CPython」にまとめられており、2023年10月にPythonの将来の舵取りを担うステアリングカウンシルによって受理された。ただし、その際のアナウンスでは、脱GIL化を次のように段階を踏んで進めることになっている。
フェーズ1は、フリースレッド版Pythonのビルドや配布が可能だが、デフォルトではインストールされず、あくまでも実験的なビルドという状況になる。macOSやWindowsではPython 3.13のインストーラーにそうしたビルドが含まれていたことをご存じの方もいると思うが、フェーズ1はPython 3.13で実現されている。
そして、フェーズ2に移行するための要件をまとめたものとしてPEP 779がある。
GILありのPythonではシンプルな形でスレッドセーフを実現していたが、フリースレッド版PythonではGILなしでスレッドセーフを実現しながら、複数のスレッドが複数のCPUコアを活用できるようにするために、GILありのPythonと比べてコスト(速度低下やメモリ使用量の増加)が発生する。また、安定的なAPI/ABIや開発者に向けたフリースレッド版Pythonに関する内部ドキュメントも必要になる(ABIとは「Application Binary Interface」のこと。主にC APIで書かれた拡張モジュールのバイナリレベルでの互換性を保証する規約)。PEP 779ではそのような要件がまとめられるとともに、Python 3.14での実現状況や達成に向けた見積もりが語られている。
具体的には、フェーズ2移行に向けた性能要件としてはGILありのPythonと比較して「最大15%のパフォーマンス低下」「最大20%のメモリ使用量の増加」を許容可能な上限としている。一方で、APIとドキュメントに関しては「APIについては大きな変更は必要ない」「フリースレッド版Pythonについての内部ドキュメントについてもPython 3.14のリリースには間に合うだろう」とされている。
PEP 779は2025年6月に承認された(同時にフェーズ2の間に解決すべき要件がまとめられてもいる)。これにより、Python 3.14からフリースレッド版Pythonへ移行するためのフェーズ2が始まることになった。
ただし、Python 3.15でフリースレッド版Pythonが「デフォルト」となる、つまりフェーズ3への移行が行われるかどうかはまだ決まっていない。Python 3.14は「フェーズ2の始まり」である。フェーズ2の間にPythonのエコシステムがフリースレッド版Pythonへの対応を進めることが、フェーズ3への移行を決定する一番の要因だからだ。
PEP 779を承認するアナウンスでは、ステアリングカウンシルはフェーズ2の間に以下の要件に対処する必要があると考えている。
この他にもサードパーティライブラリのフリースレッド版Python対応がさらに進められることも重要だ。
PEP 779の承認時に挙げられたこれらの要件が満たされた時点で、フェーズ3への移行が承認され、その次のバージョンのPythonからは「フリースレッド版がデフォルト」となると思われる。また、GILありのPythonについても、いつそれが削除されるかは決まっていない。フリースレッド版Pythonがデフォルトになり、大多数の人がこれを使うようになった時点で、GILありのPythonの削除についても検討が始まるはずだ。だが、当面はGILありのPythonとフリースレッド版Pythonが並行して使われることになるだろう。
どうも。HPかわさきです。
今回はフリースレッド版Pythonへの移行についてまとめました。3つのフェーズに分けて段階的に移行を進めていくのは、互換性の確保や、サードパーティライブラリでのフリースレッド版Pythonのサポートという面ではとてもよいことだと筆者は考えています。Python 2からPython 3への移行でもかなりの時間をかけていたという印象がありますが、フリースレッド版Pythonについても慎重かつ確実にPythonを進化させていこうという意志が感じられます。
Pythonのコードから複数のCPUコアを活用するには、GILから脱してフリースレッド版Pythonへと進化する必要があります。これからの展開にも大きく期待しましょう。
Copyright© Digital Advantage Corp. All Rights Reserved.