传递上下文向下函数的一种干净方法是什么?

时间:2018-10-25 20:32:32

标签: python multithreading locking

我正在尝试使用锁作为上下文来管理同步文件操作。但是,当一个函数调用另一个需要锁定的函数时,我最终将永远受阻。

例如:

from threading import Lock
lock = Lock()


def foo():
    print('foo')
    with lock:
        print('foo-locked')
        bar()


def bar():
    print('bar')
    with lock:
        print("bar-locked")  # Will not print since lock is owned by foo()

foo()

是否有一种干净的方法将一个函数的上下文传递给另一个函数?我宁愿不将锁作为参数发送,而是在某些函数中而不是在其他函数中使用上下文管理器。

1 个答案:

答案 0 :(得分:1)

您可以考虑使用重入锁(Threading.RLock)。只要需要锁定的2个功能在同一线程中,它们就可以继续执行。