Effectinve Python的59个有效方法中第38条使用Lock防止数据竞争中运行错误的问题

系统:Ubuntu1804

在Jupyter Notebook中运行,使用的anaconda下的python3.7.6。

在代码运行中出现错误的问题,源代码如下:代码为书中样例代码,但是在运行时候并没有出现将value锁定的情况。

暂且记录下来,简单找了下没有找到答案,先记录下等日后再进行寻找。

class Counter(object):
    def __init__(self):
        self.count = 0
    def increment(self, offset):
        self.count += offset

class LockingCounter(object):
    def __init__(self):
        self.lock = Lock()
        self.count = 0
    def increment(self, offset):
        with self.lock:
            self.count += offset

def worker(sensor_index, how_many, counter):
    for _ in range(how_many):
        counter.increment(1)
        
def run_threads(func, how_many, counter):
    threads = []
    for i in range(5):
        args = (i, how_many, counter)
        thread = Thread(target=func, args=args)
        threads.append(thread)
        thread.start()
    for thread in threads:
        thread.join()
        
how_many = 10**5
counter = LockingCounter()
run_threads(worker, how_many, counter)
print("Counter should be %d, found %d" %(5*how_many, counter.count))

输出结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值