Pythonのthreading, subprocess, multiprocessingの使い分け
Pythonのthreading (threadというモジュールもある), subprocess, multiprocessingはなんだか似た機能なのでいつどれを使っていいのかすぐに忘れてしまいますが、Stackoverflowのこの回答がそれぞれの使い分けについて非常によくまとまっていてるので備忘録がてら訳出というか要点を書き出してみました。
subprocessは他の実行ファイル(例、ffmpeg.exe)などをPythonから開始したいときに使う。subprocessだと生み出したプロセスとPythonとのやりとりはパイプとかファイルとかになり色々と制限がある。
Pythonモジュールや関数などをSpawnするときにはマルチコアがつかえるmultiprocessingを使う。multiprocessingはthreading/threadのほぼ上位互換なので最近はthreadingの出番はほぼない。
threadingやその下位レベルのモジュールthreadはマルチコアのCPUが普及する前からある古いモジュールなので、マルチコア未対応。つまり、GILの制限がある。それでもディスクI/Oなどの遅延を回避するのに便利なので使われてきたが、いまならmultiprocessingでも同じことができる。
新しいスレッドを開始したいのだから思わずthreadingかな?といつも思っちゃうんだけど、今はmultiprocessingを使うべきなんですね。
最近はケータイすらマルチコアですからね。
この図には載っていないですがIntelから最初にでたマルチコアのPentium Dは2005年の5月だそうです。AMDもAthlon 64 x2を同時期に投入。10年前ですかぁ。
« Windows 10はプライバシーがどうのこうの | トップページ | 有料ゲーム・アプリが「実質タダ」に!Amazon undergroundを試してみた »
「Python」カテゴリの記事
- Noteの記事をPythonでバックアップしといた。(2021.05.05)
- JupyterLabでも好きな外部エディターを使いたい!(2018.05.02)
- ローカルエリア内のJupyterLabサーバーにLAN経由で接続する。(2018.05.02)
- Juliaやってみよう。五日目。Pythonと速度比較。(2017.08.01)
- Juliaやってみよう。四日目。@timeでプロファイリング(2017.07.16)
« Windows 10はプライバシーがどうのこうの | トップページ | 有料ゲーム・アプリが「実質タダ」に!Amazon undergroundを試してみた »




コメント