【发布时间】:2019-07-07 06:22:59
【问题描述】:
Python 有一个名为Condition 的线程对象,它会阻塞一个线程,直到另一个线程调用notifiy() 或notify_all()。但是,在调用wait() 方法之前,您必须先调用acquire() 来获取内部锁。 wait() 方法然后释放锁并等待通知,之后它将继续重新获取锁,您可以运行一些需要线程安全的代码。我的问题是,当您调用 wait() 方法时,为什么 Condition 对象不会在内部自动获取锁:
Python 线程文档
必须在持有相关锁的情况下调用其他方法。
wait()方法释放锁,然后阻塞直到另一个线程通过调用notify()或notify_all()唤醒它。一旦被唤醒,wait()重新获取锁并返回。也可以指定超时。
所以在这段代码中我获取了锁,wait 方法立即释放它,然后在收到通知后它再次获取它,然后我最终释放它。
lock = threading.Lock()
condition = threading.Condition(lock=lock)
...
condition.lock() # acquire the lock
condition.wait() # waiting for another thread to notify me
condition.release() # release the lock
为什么wait() 调用不只是等待然后在收到通知后获取锁我不明白为什么我要获取它将释放的锁
【问题讨论】:
-
我没有答案,但我很高兴看到其他人有答案。这是一个很好的问题。 :)
标签: python multithreading python-internals