Pythonでマルチスレッドが機能するかどうかについて少し混乱しています。
私はこれについて多くの質問があり、それらの多くを読んだことを知っていますが、私はまだ混乱しています。私は自分の経験から知っており、他の人が自分の答えと例をここでStackOverflowに投稿して、マルチスレッドが実際にPythonで可能であることを確認しました。では、なぜPythonはGILによってロックされており、一度に1つのスレッドしか実行できないと誰もが言い続けるのはなぜでしょうか。それは明らかに機能します。または私がここに来ていないいくつかの違いはありますか?
多くのポスター/回答者は、複数のコアを使用しないため、スレッド化が制限されていることについても言及し続けます。しかし、それらは同時に機能するため、組み合わせたワークロードをより高速に実行できるため、依然として有用です。それ以外の理由でPythonスレッドモジュールが存在するのはなぜですか?
更新:
これまでのすべての答えをありがとう。私が理解している方法では、マルチスレッドは一部のIOタスクに対してのみ並列実行されますが、CPUにバインドされた複数のコアタスクに対しては一度に1つしか実行できません。
これが実際に何を意味するのかは完全にはわかりませんので、マルチスレッドにしたい種類のタスクの例を示します。たとえば、文字列の非常に長いリストをループして、各リストアイテムに対して基本的な文字列操作を実行したいとします。リストを分割し、各サブリストをループ/文字列コードで処理するために新しいスレッドで送信し、結果をキューに送信すると、これらのワークロードはほぼ同時に実行されますか?最も重要なことは、これは理論的にスクリプトの実行にかかる時間を短縮することですか?
別の例としては、4つの異なるスレッドでPILを使用して4つの異なる画像をレンダリングおよび保存でき、画像を1つずつ処理するよりも速いですか?この速度の要素は、正しい用語が何であるかではなく、私が本当に疑問に思っていることだと思います。
マルチプロセッシングモジュールについても知っていますが、今の私の主な関心は小中規模のタスクロード(10〜30秒)であり、サブプロセスの開始が遅くなる可能性があるため、マルチスレッド化の方が適していると思います。