Мне еще предстоит найти ясное объяснение различий между классами Condition
и Event
в модуле threading
. Есть ли явный вариант использования, когда кто-то был бы более полезным, чем другой? Все примеры, которые я могу найти, используют модель производителя-потребителя в качестве примера, где queue.Queue
будет более простым решением.
Threading.Condition vs threading.Event
Ответ 1
Проще говоря, вы используете условие, когда потоки заинтересованы в ожидании того, что что-то станет истинным, и после его истины, чтобы иметь эксклюзивный доступ к некоторому совместно используемому ресурсу.
В то время как вы используете событие, когда потоки просто заинтересованы в том, чтобы что-то стало истинным.
В сущности, условие является абстрактным событием + блокировкой, но оно становится более интересным, если учесть, что вы можете иметь несколько разных Условий по одному и тому же базовому блокировке. Таким образом, у вас могут быть разные условия, описывающие состояние базового ресурса, означающее, что вы можете разбудить работников, интересующихся только конкретными состояниями общего ресурса.