Pythonスレッドロック
1821 ワード
ワイヤロック
1つのデータに複数のスレッドが変更可能である場合、どのスレッドが変更されても他のスレッドに影響します.あるスレッドが使用済みになる前に、他のスレッドが変更できない場合は、このスレッドにスレッドロックを追加する必要があります.
lock
lockはローカルを重視し,ある変数が呼び出されず,他のスレッドが呼び出されない.
出力結果:
join
joinは全体を重視し,スレッド1は実行が完了せず,スレッド2は実行できない.
実行結果:
1つのデータに複数のスレッドが変更可能である場合、どのスレッドが変更されても他のスレッドに影響します.あるスレッドが使用済みになる前に、他のスレッドが変更できない場合は、このスレッドにスレッドロックを追加する必要があります.
lock
lockはローカルを重視し,ある変数が呼び出されず,他のスレッドが呼び出されない.
import threading
import time
import random
count = 0
def get_money(money):
global count
count += money
count += money
count -= money
lock = threading.Lock()
def lock_thread(money):
#
lock.acquire()
time.sleep(random.randint(1, 3))
print(' ',threading.current_thread().name)
get_money(money)
time.sleep(random.randint(1,3))
print(' ', threading.current_thread().name)
#
lock.release()
thread1 = threading.Thread(target=lock_thread,name='thread1',args=(10000,))
thread2 = threading.Thread(target=lock_thread,name='thread2',args=(15000,))
thread1.start()
thread2.start()
print('hello world')
出力結果:
hello world
thread1
thread1
thread2
thread2
join
joinは全体を重視し,スレッド1は実行が完了せず,スレッド2は実行できない.
import threading
import time
import random
count = 0
def get_money(money):
global count
count += money
count += money
count -= money
def lock_thread(money):
time.sleep(random.randint(1, 3))
print(' ',threading.current_thread().name)
get_money(money)
time.sleep(random.randint(1,3))
print(' ', threading.current_thread().name)
thread1 = threading.Thread(target=lock_thread,name='thread1',args=(10000,))
thread2 = threading.Thread(target=lock_thread,name='thread2',args=(15000,))
thread1.start()
thread1.join()
thread2.start()
print('hello world')
実行結果:
thread1
thread1
hello world
thread2
thread2