В Python есть поточный объект с именем Condition
, который блокирует поток, ожидающий, пока другой поток не вызовет notifiy()
или notify_all()
.Однако перед вызовом метода wait()
необходимо сначала вызвать acquire()
, чтобы получить внутреннюю блокировку.Затем метод wait()
снимает блокировку и ожидает уведомления, после чего он переходит к повторной блокировке, и вы можете запустить некоторый код, который должен быть поточно-ориентированным.Мой вопрос заключается в том, почему объект Condition
не получает внутреннюю блокировку автоматически при вызове метода wait()
:
Документация по потокам 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()
просто не ждет, а затем получает блокировку, как только она получит уведомление. Я не понимаю, почему я получаю блокировку, чтобы она затем разблокировала