python线程锁实践实例

写这篇文章之前,我想起了一句实践出真知的诗,感觉就在嘴边但就是记不起来,最后百度之。

。 。 。 。 。 。

纸上得来终觉钱,绝知此事要躬行。

。 。 。 。 。 。

唯有实践出真知,学以致用才是学习的终点。

 

注意点一:

主进程(也叫主线程)也是可以请求和释放线程锁的。

 

注意点二:

线程锁必须是全局的,这样方能实现在主线程(就是进程)和子线程之间切换。

 

注意点三:

线程锁只在有请求锁的线程中生效,对第三方未请求锁的线程不起作用。

 

使用场景:

1,多个线程操作同一个共享变量的时候,避免共享变量出错,(两个线程同时修改变量,导致出错)。

2,让主线程阻塞,即下一步操作需要线程结果的时候,等待线程操作执行结果,其实是上边的特殊情况。

 

下面是例子,很好的解释了上面提到的三点注意项和场景类。

 

# coding:utf-8
import threading
import time
balance = 0

class ThreadTestO(threading.Thread):
    def __init__(self, lock):
        threading.Thread.__init__(self)
        self.lock = lock

    def run(self):
        global balance
        while True:
            print "other thread"
            time.sleep(1)


class ThreadTest(threading.Thread):
    def __init__(self, lock):
        threading.Thread.__init__(self)
        self.lock = lock

    def run(self):
        global balance
        while True:
            self.lock.acquire()
            print "thread"
            print balance
            time.sleep(10)
            balance += 1
            self.lock.release()


if __name__ == "__main__":
    lock = threading.RLock()
    thread = ThreadTest(lock)
    thread.setDaemon(True)
    thread.start()

    threado = ThreadTestO(lock)
    threado.setDaemon(True)
    threado.start()

    while True:
        lock.acquire()
        print "main thread"
        print balance
        balance += 1
        time.sleep(1)
        lock.release()
 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值