マルチプロセスとマルチスレッドと非同期の比較 質問する

マルチプロセスとマルチスレッドと非同期の比較 質問する

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)]:

  • ジャプラントGitHub)は、非常に高速なパイプラインHTTPサーバーであり、uvループ

おすすめ記事