python的锁

查了很多材料都没有看太邃晓,屡次尝试后终究有些邃晓了,python中,锁的意义。

import threading,time,random
sumresult = 0
class SUM(threading.Thread):
    def run(self):
        global sumresult
        for i in range(5):
            time.sleep(random.randint(50,100)/100.0)
            sumresult+=1
            print sumresult
for i in range(100):
    SUM().start()

实行上面代码,会发明,sumresult的终究效果常常不会是500,而是498、499,就是由于运转过程当中,涌现了两个线程同时改写sumresult值的状况。

锁,在多线程时,保证统一时候只要一个线程能够接见同享的资本,从而保证线程间的数据同步。
当某线程须要变动同享数据时,我们此时请求一把锁.acquire(),将其锁定,其他线程假如须要接见此数据,就会进入守候的状况,直到锁翻开.release()为止。
我们轻微改写代码,在举行复制操纵时请求锁,完成后把锁开释

import threading,time,random
sumresult = 0
lock=threading.Lock()
class SUM(threading.Thread):
    def run(self):
        global sumresult
        for i in range(5):
            time.sleep(random.randint(50,100)/100.0)
            lock.acquire()
            sumresult+=1
            lock.release()
            print sumresult
for i in range(100):
    SUM().start()

就会获得准确的效果。
你或许还会发明,顺序的运转时候变长了,由于为了保证同步,有些线程须要守候锁的开释。所以为了保证效力,要把占用锁的时候只管收缩。

别的还须要注意的是,锁须如果统一把,才保证同步!

    原文作者:Mr布
    原文地址: https://segmentfault.com/a/1190000000360180
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞