[python] lock 解决线程安全问题
用法1 try-finally 模式
import threading
import timelock = threading.Lock()lock.acquire()try:##do something
finally:lock.release()
用法2 with 模式
import threading
import timelock = threading.Lock()with lock:##do something
import threading
import timelock = threading.Lock()class Account:def __init__(self, balance):self.balance = balancedef draw(account, amount):with lock:if account.balance >= amount:print(threading.current_thread().name, "取钱成功")time.sleep(0.1)account.balance -= amountprint(threading.current_thread().name, f"余额{account.balance}")else:print(threading.current_thread().name, "取钱失败,余额不足")if __name__ == "__main__":account = Account(1000)ta = threading.Thread(target=draw, args=(account, 800), name="ta")tb = threading.Thread(target=draw, args=(account, 800), name="tb")ta.start()tb.start()
来自
Python线程安全问题以及解决方案_哔哩哔哩_bilibili