python - 带有 'with' 语句的非阻塞锁

标签 python multithreading locking

据我所知,如果 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/

相关文章:

python - 无效索引错误: Reindexing only valid with uniquely valued Index objects

c++ - 为每次 c++ 创建一个障碍

c++ - 代码中的随机错误

java - 双重检查锁定文章

multithreading - TOmniMREW是否有较少的CPU密集型替代方案?

postgresql - postgres 中的咨询锁和评估顺序(如何在不使用单独查询的情况下获取锁)

python - 将十六进制字符串文件转换为整数的最佳方法

python - 更改 ggplot 的默认样式

visual-studio-code - 如何使用我的 Telegram Bot 使用他们的用户名向某人发送消息

c++ - 如何监控 Qt Signal 事件队列深度