« Windows 10はプライバシーがどうのこうの | トップページ | 有料ゲーム・アプリが「実質タダ」に!Amazon undergroundを試してみた »

2015年8月28日 (金)

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を使うべきなんですね。

最近はケータイすらマルチコアですからね。

Moores_law_19702011 ウィキペディアより

この図には載っていないですがIntelから最初にでたマルチコアのPentium Dは2005年の5月だそうです。AMDもAthlon 64 x2を同時期に投入。10年前ですかぁ。

« Windows 10はプライバシーがどうのこうの | トップページ | 有料ゲーム・アプリが「実質タダ」に!Amazon undergroundを試してみた »

Python」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Pythonのthreading, subprocess, multiprocessingの使い分け:

« Windows 10はプライバシーがどうのこうの | トップページ | 有料ゲーム・アプリが「実質タダ」に!Amazon undergroundを試してみた »

しろののツイッタータイムライン(凍結中)

オススメたち

2021年7月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

はてブ

無料ブログはココログ