Python 3.4 には、マルチプロセス/スレッド用のさまざまなライブラリがいくつかあることがわかりました。マルチプロセッシング対スレッド対非同期。
しかし、どれを使えばいいのか、あるいは「推奨されているもの」なのかわかりません。これらは同じことを行うのでしょうか、それとも異なるのでしょうか。もしそうなら、どちらが何のために使用されるのでしょうか。コンピューターのマルチコアを使用するプログラムを書きたいのですが、どのライブラリを学習すればよいのかわかりません。
ベストアンサー1
要約
正しい選択をする:
最も一般的な並行処理の形式について説明してきました。しかし、どの形式をいつ選択すべきかという疑問が残ります。これはユースケースによって異なります。私の経験 (および読書) によると、私は次の疑似コードに従う傾向があります。
if io_bound:
if io_very_slow:
print("Use Asyncio")
else:
print("Use Threads")
else:
print("Multi Processing")
- CPUバウンド => マルチプロセッシング
- I/O バウンド、高速 I/O、接続数の制限 => マルチスレッド
- I/O バウンド、低速 I/O、多数の接続 => Asyncio
[注記]:
- 長い呼び出しメソッド(例えば、スリープ時間や遅延I/Oを含むメソッド)がある場合、最適な選択は非同期、ねじれたまたは竜巻単一のスレッドで並行処理として動作するアプローチ (コルーチン メソッド)。
- 非同期Python3.4以降で動作します。
- 竜巻そしてねじれたPython2.7以降で使用可能
- uvループ超高速
asyncio
イベントループ(uvループ2~4倍速くなりますasyncio
。
[更新 (2019)]: