輸入糸パッケージ
輸入スレッド
レディスレッド機能、パラメータを渡します
T1 = threading.Thread(目標= FUNC、引数の=(引数))
クラス継承スレッド、スレッドオブジェクトが作成されます
クラスMyThread(threading.Thread) デフ(自己)を実行します。 渡す 場合 __name__ == " __main__ " : T = MyThread() t.startを()
スレッドは完全に変数共有しますが、共有グローバル変数データエラーが発生する問題に
ロッククラスthreadingモジュールを使用して、問題のスレッドがグローバル変数を共有解決することができますミューテックスを追加します
#ロック作成 ミューテックスを= threading.Lock() #は、ロックされた mutex.acquireを() #のリリースロックを mutex.release()
ミューテックスは、デッドロックにつながる可能性が
二つのスレッドそれぞれがリソースの部分を占めている場合、時間の複数のスレッド間で共有リソースを、そしてお互いのリソースを待っていると同時に、デッドロックが発生します。
解決策:
1.銀行家のアルゴリズム:プログラミング時間と空間の関係をロックし、解放するためには良い時間のような
2タイムアウト待ちを追加します。
PythonのグローバルインタープリタロックGILマルチスレッドでは
GILは、PythonインタプリタのC言語バージョンの遺産である
GILロックが一つだけのスレッドで実行が存在し、同じ時間でのpythonになります
が、マルチスレッドまたはシングルスレッドの高速閉じたが、結局、これはスレッドですIOの期間を遮断する、他のスレッドが実行できる
GILロックとmutexを同じではありません、GILロックがスレッド、トランザクション内のスレッドのミューテックスのロックをロックされて、ミューテックスが開発者自身によって書かれ、GILロックPythonのインタープリタのCバージョンのソース
GIL解決するための手段
1 PythonのJavaインタプリタのバージョン
2.他の言語コード、この部分が完了したことを