Pythonの並行処理には、asyncioとThreadingの2つの主要な方法があります。これらはどちらも交互に実行されますが、Threadingは抢占式で、asyncioは協力式です。
Threadingとは
Pythonは長い間スレッドを持っていました。スレッドにより、操作を並行に実行することができます。しかし、Global Interpreter Lock(GIL)の問題があり、スレッドは真の並列性を提供できませんでした。しかし、マルチプロセッシングにより、Pythonで複数のコアを活用することが可能になりました。
GILは、Pythonインタープリタが一度に1つのスレッドしか実行しないようにするロックメカニズムです。つまり、一度に1つのスレッドだけがPythonバイトコードを実行できます。このGILにより、複数のスレッドが並行に実行されないことが保証されます。
asyncioとは
asyncioは、I/Oイベントを追跡し、準備ができているタスクに切り替え、I/O待ちのタスクを一時停止するイベントループを提供します。したがって、現在実行可能でないタスクに時間を無駄にすることはありません。
まとめ
PythonのasyncioとThreadingは、それぞれ異なる状況と設計を想定しています。ベンチマークでは、パフォーマンスも大きく異なることがわかりました。したがって、どちらを使用するかは、具体的な要件と状況によります。