pythonがコンカレントメソッドをサポートする方法の詳細な説明

GIL(Global Interpreter Lock)が存在するため、PythonプロセスはCPUの1つのコア、つまり対応するオペレーティングシステムの1つのみを同時に使用できます。
カーネルスレッド、Python Webプログラムの場合、要求があり、それが時間のかかるコンピューティングタスク(職業)である場合、このプログラムは最初の要求を受け取ります
他のリクエストを処理できますか? Webプログラムがリクエストを受信した場合、Trueの間です。

def handle_request(request):while True:
 pass

コードの観点から見ると、Pythonには実際の実行スレッドが1つしかありません。コードが「whileTrue」になると、CPUコアを1つだけ占有し、処理する機会があります。
他のタスク?

Trueの間に実行するために両方のスレッドを開始し、2つの要求をシミュレートするために実行できるかどうかを観察してみましょう。

import time, threading

def f1(name):while True:print(name)
 time.sleep(1)

threading.Thread(target=f1, args=('f1',)).start()
threading.Thread(target=f1, args=('f2',)).start()

出力結果:

f1
f2
f2f1
f2
f1

実際、Django(Python Webフレームワーク)を使用してテストすると、リクエストが「while True」のようなコードを実行した場合でも、他のリクエストを処理できます(同時実行をサポート)。

両方の whileTrueを実行できる理由を説明するには:
GILロックは引き続き使用されます。最初の while Trueスレッドは、実行する前にこのロックを実行できます。次に、print(name)を実行してから、ロックを解放します。
一時停止してから、2番目の while TrueスレッドがGILを取得して実行を開始し、GILの周囲で交互に実行することで、Pythonのマルチスレッドを実現します。

結論として:

Trueは常にCPUリソースを保持できるわけではありませんが、しばらくの間実行され、しばらく休止するため、他のプロセスにチャンスが与えられます。2つの重要なポイントがあります。

ロックをつかんで並べます。ロック用のキューを配置し、実行する場合はこのキューに入ります。

ロック解除は、プロセスのスケジューリングにいくぶん似ています。

IO操作が発生した場合は、IOデバイスが計算を完了するのを待ってからスレッドの実行を続行する必要があります。この間、CPUリソースは占有されず、最初にロックが解放されます。
積極的に待機し、通常はスリープし、積極的にロックを解除し、特定の時間まで待機してから再実行します。

上記の分析は、Pythonが並行性をサポートしていることを示していますが、マルチコアプロセッサを利用できないため、多数の同時コンピューティング集約型アプリケーションに対して
Pythonの使用には適していません。

Recommended Posts

pythonがコンカレントメソッドをサポートする方法の詳細な説明
pythonバックトラッキングテンプレートの詳細な説明
pythonシーケンスタイプの詳細な説明
PythonIOポート多重化の詳細な説明
pythonコマンドの-uパラメーターの詳細な説明
Python推測アルゴリズムの問題の詳細な説明
Python super()メソッドの原理の詳細な説明
python標準ライブラリOSモジュールの詳細な説明
Pythondecimalモジュールの使用法の詳細な説明
Pythonに基づくデータタイプの詳細な説明
Python関数パラメータ分類の原理の詳細な説明
Pythonタイマースレッドプールの原理の詳細な説明
Pythonインターフェース開発の実装手順の詳細な説明
Pythonプロセス制御の一般的なツールの詳細な説明
PythonWebページパーサーの使用例の詳細な説明
Pythonオブジェクトの属性アクセスプロセスの詳細な説明
pythonに基づく残りの問題の詳細な説明(%)
Pythonプラグインメカニズムの詳細な実装
魔法の方法とPythonの使用
Pythonでの辞書の詳細な使用法
pythonのインストールが成功したことを確認する方法
Pythonでのpipの使用に関する詳細な説明|サードパーティライブラリのインストールの概要
Pythonガベージコレクションメカニズムの詳細な分析
属性からプロパティまでのPython詳細な説明
Python仮想環境venvの使用法の詳細な説明
Pythonマルチプロセスプログラミングの一般的な方法の分析
Pythonの描画|ウェザーレーダーとさまざまなレーダー画像の視覚化方法のエントリーレベルの説明
Ubuntu20.04インストールPython3仮想環境チュートリアル詳細な説明
Python操作の一般的なメソッドの分析Jiraライブラリ
27歳でパイソンを学ぶのはどうですか?
CentOS6.5でのHadoop環境の構築に関する詳細な説明
Pythonを使用してKSを計算する詳細な例
Python3.9の7つの機能
Ubuntuでの静的DNS構成方法の詳細な説明
Centos7システム仮想マシンブリッジングモードの詳細な説明
Python描画|さまざまな台風経路の視覚化方法
Pythonでのパッケージの導入を理解する方法
pythonで番号のリストを理解する方法
pythonで写真を自動的にダウンロードする方法の例
同等の保険評価:Centosタイムアウト終了の詳細な説明
vmwareでのCentOS7ネットワーク設定チュートリアルの詳細な説明