– Start
假设我们有两个线程随机转账,我们增加了审计功能。
from threading import Thread, Lock
import threading
from random import randint
# 定义账户类
class Account:
def __init__(self, debit):
self.debit = debit
self.lock = Lock()
def increase(self, amount):
with self.lock:
self.debit += amount
account = Account(0)
# 启动两个线程同时转账
def transfer():
total_amount = 0 # 审计变量
for i in range(10000):
amount = randint(1, 10)
account.increase(amount)
total_amount += amount
# 打印出每个线程的转账总额
print(f'{threading.current_thread().getName()} transfered {total_amount}')
t1 = Thread(target=transfer)
t2 = Thread(target=transfer)
t1.start()
t2.start()
# 等待 t1 和 t2 结束,打印结果
t1.join()
t2.join()
print(account.debit)
除此之外,我们还可以使用本地线程变量。
from threading import Thread, Lock
import threading
from random import randint
# 定义账户类
class Account:
def __init__(self, debit):
self.debit = debit
self.lock = Lock()
def increase(self, amount):
with self.lock:
self.debit += amount
account = Account(0)
# audit 是 Global 变量
audit = threading.local()
# 启动两个线程同时转账
def transfer():
# audit.total_amount 是 local 变量,每个线程独立
audit.total_amount = 0
for i in range(10000):
amount = randint(1, 10)
account.increase(amount)
audit.total_amount += amount
# 打印出每个线程的转账总额
print(f'{threading.current_thread().getName()} transfered {audit.total_amount}')
t1 = Thread(target=transfer)
t2 = Thread(target=transfer)
t1.start()
t2.start()
# 等待 t1 和 t2 结束,打印结果
t1.join()
t2.join()
print(account.debit)
– 更多参见:Python 精萃
– 声 明:转载请注明出处
– Last Updated on 2018-10-10
– Written by ShangBo on 2018-10-10
– End