1. グローバルロックGIL
では、常に1つのスレッドのみが実行されます- > スレッドの方が安全です
2. スレッドの複雑度が高いため、通常は使用しないことをお勧めします
3. データベーススレッドプール、データベース接続プールで使用
4 。少し難しい変更、スレッドの多くを使用しないでください
MLOCK = threading.Lock()
5 。ミューテックスの
ロック獲得の
mlock.acquireを()
ロック解除リリースする
mlock.release()
ロック解除した後に、リリースには、デッドロックが発生しません
例えば:変更するために他の人を望んでいないファイルを開く
6. MLOCK = threading.RLock()
デッドロック、デッドロック防止再利用ロックは、ロックをロックおよび解除する複数の同じ機能で使用することができる場合
:プログラム
#1 試験、スレッドセーフ
インポートスレッド
num = 0
def t():
グローバルNUM
NUM。+ = 1枚の
プリント(NUM)
用 I に範囲(0,6 ):
D = threading.Threadの(目標= T)
d.start()
#を順次出力することができる
インポートスレッディング
インポート時間
DEF func_A():
印刷(" a function start " )
time.sleep( 2 )
print(" a function end " )
def func_b():
print(" b function start " )
time.sleep(2 )
印刷(" B機能の終了" )
B時間 = time.time()
func_A()
func_B()
印刷(time.time() - Bタイム)
#実行するための秒の表示回数
インポートスレッディング
_a = threading.Thread(対象= func_Aを)
_b = threading.Thread(ターゲット= func_B)
_a.start()
_b.start()
#スタート
_a.join()
_b.join()
#の待機
印刷(time.time() - Bの時間)
#見る時間
#のロックそして
スレッドを解放するインポート
MLOCK = threading.Lock()
#は、ロック、MLOCK名を作成
#)(MLOCK = threading.RLockを
#をデッドロック、デッドロック防止、再利用可能なロックがある場合に
NUM = 0
DEF A():
株式会社無料で参加NUM
(mlock.acquire )
#1 ロック
NUM = + 1。
mlock.release()
#のリリースロック
印刷(NUM)
のための I における範囲(10 ):
D = threading.Thread(目標=のA)
d.start()
2020-04-12