python实现自动加解锁

2018-11-07  本文已影响0人  还少一双小脚丫

在多线程中锁的重要性众所周知,死锁的情况也经常出现,特别是在线程崩溃的时候,如果已经加锁,其他的线程会因为永远无法获取到锁而等待下去。
如果所有的操作都是手动的lock,unlock,势必会造成操作的麻烦,自动加解锁应运而生
在C++中可以利用类的构造函数和析构函数进行自动加解锁,那么在python中如何实现?
答案是利用with,with可以保证在异常的情况下依然可以执行退出操作

实现代码如下

class AutoLock:
    def __init__(self):
        self._lock = Lock()
    def __enter__(self):
        print('lock')
        self._lock.acquire()
    def __exit__(self, exc_type, exc_val, exc_tb):
        print('unlock')
        self._lock.release()

测试代码

    auto = AutoLock()
    with auto:
        raise ('123')

执行结果

image.png

其他类型锁的实现类似

上一篇下一篇

猜你喜欢

热点阅读