curekoshimizu

curekoshimizu

Pythonスレッドとは結局何なのか? ~CPython実装から見るNoGIL時代の変化~

ラン#pyconjp_4中級日本語
12:00 - 12:3030min
DAY 1
09/26
FRI

「Pythonのスレッドは遅い」・「GILのせいで真の並列処理ができていない」こうした話は誰もが一度聞いたことがあるでしょう。しかし、Pythonスレッドの実体が何なのか、なぜそういう話がでているのかを実装レベルで理解している人は多くありません。

Python 3.13でついに実現したGIL無効化機能により、この状況は大きく変わろうとしています。しかし、NoGILモードを効果的に活用するためには、まず「Pythonスレッドとは何か」を深く理解する必要があります。

本発表では、CPythonのソースコードを読み解きながら、この根本的な問いに答えます。そもそも、threading.ThreadとThreadPoolExecutorの違いは?WebKitから着想を得た"Parking Lot"とは?NoGILで変わるスピンロックやeval_breakerの挙動は?

実装コードとともに、Pythonスレッドの正体とNoGIL時代の変化を理解する30分間です。


トーク詳細 / Description

Pythonのスレッドは遅いと言われることがありますが、確かにCPUバウンドタスクでは遅く、 GILのせいで実質1スレッドでしか動作しておりませんでした。しかしながら、I/O待機中ではどうでしょう? こうした動きの違いをまずは説明します。

まずは、Pythonスレッドの基本となる、threading.TheradやThreadPoolExecutorの中身を説明します。これを実装レベルで理解すると、GILというものが遅さの主要因であることが見えてきます。

そもそも、なぜGILという考えがあったのかを説明します。それにより、スレッドというのはどのような動きになるのかを説明していきます。 その実装の紹介の中で、Parking Lotやスピンロック、eval_breakerといった用語についてもお話できると思います。

2020年代のマルチコア時代にPythonを加速するNoGILモードについて深く理解し、スレッドについて深く理解できるようにする、そんな30分になります。


この題材を選んだ理由やきっかけ

threading.ThreadとThreadPoolExecutorの実装の差を知らずに使っている方も多いのではないかと思っており、この差を説明できると普段書くコードが変わるのではないかと思っております。 表面的な理解ではなく、CPythonの中のコードを見ながら理解することができるのでエビデンスを持ちながら理解できることで、納得感を与える事ができるのではないかと思っております。 3.13から登場したNoGILによって結局のところどう変わるのかということを説明することが、現代のマルチコア時代には必要だと考えております。


オーディエンスが持って帰れる具体的な知識やノウハウ

「Pythonスレッドとは何か」への明確な答え

  • OSスレッドとPython独自機構の関係
  • GILの本当の役割と影響

CPython実装レベルの深い理解

  • threading.Thread、ThreadPoolExecutor、Parking Lotの実装詳細
  • ソースコードを読む力の向上

NoGIL時代への実践的な準備

  • GIL有効/無効での挙動の違い

オーディエンスに求める前提知識

Pythonの文法

curekoshimizu

curekoshimizu

プロフィール

京都大学理学部に首席で合格し京都大学大学院を経てエンジニアの道へ。新卒のFixstarsではExecutive Engineerとして組織リードし上場を経験。その後Mujinではアーキテクト。続くPreferred NetworksではEMを務めるとともに、物流部門の立ち上げを主導。HacobuではCTO室室長・研究開発部部長として着任。2024年5月よりRecustomerにCTOとして参画。Pythonは10年以上つかっており、大好きな言語です!