なぜマルチスレッドでPythonのコードが速くならないのですか？どうすれば直りますか？
Pythonは内部的なスレッド安全性の要求のために、GILと呼ばれるグローバルインタープリターロックでインタープリターへのアクセスを制限しています。残念ながら、この設計上の決定により、複数のスレッドを同時に実行できるマシンであっても、一度に1つのスレッドしかPythonコードを解釈することができません。

もしPythonのコードをあるデータセットに対して実行したい場合、そしてそのデータを独立したセグメントに分割できる場合（データ分割として知られている処理）、Pythonのマルチプロセッシングライブラリを調べることをお勧めします。

例として、arg1という1つの引数を取る関数fooを考えてみましょう。

def foo(arg1)：
  # 何かをする

if __name__ == '__main__'：
  foo(val1)
  foo(val2)
  foo(val3)

fooを複数のプロセスで一緒に実行させるには、マルチプロセッシング・プールを使って複数のワーカー・プロセスを一緒に走らせればいい：

from multiprocessing import Pool

def foo(arg1)：
  # 何かをする

if __name__ == '__main__'：
  p = Pool()
  p.map(foo, [val1, val2, val3])

マルチプロセッシング・ライブラリは、他にも並列プログラミングのための様々なAPIを提供しています。もっと知りたいですか？