Python 3.4には、マルチプロセッシング/スレッド用のいくつかの異なるライブラリがあります: マルチプロセッシング vs スレッド vs asyncio =。
しかし、どちらを使用するか、または「推奨される」ものかどうかはわかりません。彼らは同じことをしますか、それとも違いますか?もしそうなら、どれが何のために使われますか?コンピューターでマルチコアを使用するプログラムを作成したい。しかし、私はどのライブラリを学ぶべきかわかりません。
それらは(わずかに)異なる目的および/または要件を対象としています。 CPython(典型的なメインラインPython実装)はまだ グローバルインタープリターロック を持っているため、マルチスレッドアプリケーション(最近の並列処理を実装する標準的な方法)は最適ではありません。 multiprocessing
mayがthreading
よりも好まれるのはそのためです。しかし、すべての問題が[ほぼ独立した]断片に効果的に分割されるわけではないため、重いプロセス間での必要性があります。それが、multiprocessing
が一般的にthreading
よりも優先されない理由です。
asyncio
(この手法はPythonだけでなく、他の言語やフレームワークにもあります。たとえば、 Boost.ASIO )は、多くのI/Oを効果的に処理する方法です並列コード実行の必要がない多数の同時ソースからの操作。したがって、それは一般的な並列処理ではなく、特定のタスクに対する単なるソリューション(確かに良いソリューションです!)です。
最も一般的な形式の並行性について説明しました。しかし、疑問は残ります-いつどれを選ぶべきですか?本当にユースケースに依存します。私の経験(および読書)から、私はこの擬似コードに従う傾向があります:
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
[[〜#〜] note [〜#〜]]: