首页 python中Lock与RLock的区别
文章
取消

python中Lock与RLock的区别

Lock vs RLock 简单对比

主要区别是Lock只能被获取一次,不能被释放前再次被获取。(在它被释放后,可以被任意线程重新获取) RLock则是另一种表现,可以被同一线程多次获取。它需要被释放同样次数才能被释放。 另一个区别是获取Lock可以被任意线程释放,当一个被获取的RLock只能被获取它的线程释放。 以下的例子是展示为什么RLock有时候是有用的。假定你有:

1
2
3
4
5
6
7
8
9
10
def f():
    g()
    h()

def g():
    h()
    do_something1()

def h():
    do_something2()

让我们假设所有fgh都是public,他们都是需要同步操作 使用一个Lock,你可以做一些事儿,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
lock = Lock()
def f():
    with lock:
        _g()
        _h()

def g():
    with lock:
        _g()

def _g():
    _h()
    do_something1()

def h():
    with lock:
        _h()

def _h():
    do_something2()

基本上,f不能调用g在获取锁的时候,它需要调用_g。所以你需要每个函数都有一个异步版本和一个同步版本

使用RLock可以很优雅的解决这个问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
lock = RLock()
def f():
    with lock:
        g()
        h()

def g():
    with lock:
        h()
        do_something1()
def h():
    with lock:
        do_something2()

Lock

RLock

相关资料

本文由作者按照 CC BY-NC-SA 4.0 进行授权

-

shell命令中的2>&1