なぜマルチスレッドでPythonのコードが速くならないのでしょうか？どうすれば直るのか。
Pythonはスレッドセーフのために、GILと呼ばれるGlobal Interpreter Lockでインタプリタへのアクセスを制限しているのだ。残念ながら、この設計上の決定により、複数のスレッドを同時に実行できるマシンであっても、一度に1つのスレッドしかPythonコードを解釈できないように制限されているのだ。

Pythonのコードをデータセットで実行したい場合、データを独立したセグメントに分割できる（データ分割と呼ばれる処理）場合、Pythonのマルチプロセシングライブラリを検討するのがよいでしょう。

例として、arg1という1つの引数を取る関数fooを考え、val1、val2、val3という複数の値に対して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を提供しているのだ。もっと知りたいと思いませんか？なのだ。