据我所知,如果 lock
已被另一个线程获取,则以下代码将被阻塞。
看来非阻塞可以通过lock.acquire(0)
来实现,但是我不得不使用try-finally
block 来代替with
block 。
lock = threading.Lock()
def func():
with lock:
# do something...
有什么方法可以实现非阻塞锁的获取吗?
最佳答案
@contextmanager
def nonblocking(lock):
locked = lock.acquire(False)
try:
yield locked
finally:
if locked:
lock.release()
lock = threading.Lock()
with nonblocking(lock) as locked:
if locked:
do_stuff()
关于python - 带有 'with' 语句的非阻塞锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501487/