SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Pythonの新機能を知ろう!

Python 3.14の新機能――フリースレッドPythonの正式サポートと高速化などを解説

Pythonの新機能を知ろう! 第7回

 Pythonは、バージョン3.9から1年おきのリリースを続けてきており、この10月7日にバージョン3.14として最新版がリリースされました。本連載では、これを受けて最新バージョンである3.14の魅力的な新機能をカテゴリ別に紹介します。

はじめに

 Pythonは、バージョン3.9から1年おきのリリースを続けてきており、この10月7日にバージョン3.14として最新版がリリースされました。本連載では、これを受けて最新バージョンである3.14の魅力的な新機能をカテゴリ別に紹介します。Python 3.14の新機能の一覧については、第6回を参照してください。

対象読者

  • Pythonの最新の機能を把握したい方
  • Pythonの経験者で、Pythonに改めて入門したい方
  • プログラミング言語の最新パラダイムに関心のある方

必要な環境

 本記事のサンプルコードは、以下の環境で動作を確認しています。

  • macOS Sequoia
    • Pyenv 2.6.9、Python 3.14.0
    • Visual Studio Code 1.105.1(拡張機能Python 2025.18.0)

[NOTE]サンプルの実行

 掲載サンプルは、それぞれの.pyファイルに記述されています。動作確認は、PyenvをHomebrewでインストールしたmacOS上で、Python 3.14.0をインストールしてターミナルから行っています。

フリースレッドPythonの正式サポート[3.14]

 Python 3.14では、グローバルインタプリタロック(GIL; Global Interpreter Lock)を使わないフリースレッドモード(Free-threading mode)を正式採用しました。これにより、マルチスレッド処理の高速化が期待できます。

 グローバルインタプリタロックとは、インタプリタ全体で一つのロックを持つことです。シングルスレッドのプログラムではロック機構がシンプルになるので速度面の恩恵が受けられる、C言語などのスレッドセーフでないライブラリの利用が容易になる、などのメリットを得られます。反面、マルチスレッドのプログラムでは並行性に制限が加わり、期待する性能を得られないというデメリットが発生します。

 例えば、複数のCPUコアを使った同時処理が制限されるので、CPUバウンドな処理(CPUの処理能力がボトルネックになる処理)に弱くなります。一方で、I/Oバウンドな処理(入出力性能がボトルネックになる処理)には有効に機能します。

 フリースレッドモードは、このグローバルインタプリタロックを無効にすることで、インタプリタの動作、特にマルチスレッド処理の高速化を図るモードです。

 Python 3.13でフェーズ1として実験的に導入されていましたが(第5回を参照)、Python 3.14においてフェーズ2に移行して、正式採用となりました。正式採用にあたり、Python 3.13において一時的とされていたフリースレッドモードにおける問題点の回避策は、より永続的とされる回避策に置き換えられました。

 ただし、Pythonエコシステムの互換性のため、フリースレッドモードのPythonはオプション扱いとなり、ビルド時のコンフィギュレーションにPy_GIL_DISABLEDの指定が必要となっています。既定で提供されるのは、従来のグローバルインタプリタロックを採用したPythonとなります。

 また、今回フェーズ2に移行したことで、将来にわたって利用できることがほぼ確実となりました。フェーズ3においてはフリースレッドモードが既定となる見込みですが、これが将来のPython 3.15で実現するかは、現時点では未定とされています。

フリースレッドモード対応版、GIL有効の判定

 フリースレッドモードが正式採用となったことで、今後はこのモードで動作するプログラムを記述することも増えていくと思われます。

 例えばフリースレッドモードでは、従来のGILが有効なPythonよりも明確にCPUバウンドな処理のスレッド化を進め、I/Oバウンドな処理をコルーチン(asyncio)で書き分けるなどです。この場合に、インタプリタがフリースレッドモードでビルドされているか、そうでない場合にGILが無効化されていないかの判定を行えると、コードの書き分けも容易になるでしょう。

リスト get-gil.py
import sysconfig, sys

if __name__ == "__main__":
  print("Is free-threaded build?:", sysconfig.get_config_var("Py_GIL_DISABLED"))
  print("Is GIL enabled at runtime?:", sys._is_gil_enabled())
	// 0, True

 フリースレッドモード対応版かどうかは、ビルド時のコンフィギュレーションにPy_GIL_DISABLEDが指定されたかをget_config_var関数で調べることができます。同様に、GILが有効かどうかは_is_gil_enabled関数で調べることができます。

次のページ
標準ライブラリ内の複数のインタプリタ[3.14]

この記事は参考になりましたか?

Pythonの新機能を知ろう!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22812 2025/12/26 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング