2016-07-09 2 views
1

Есть ли случаи, когда threading.Event's set() или clear() может потерпеть неудачу, а именно. вызывая set() снова без clear() и т.д.Может выполняться функция threading.Event() или clear() в любом случае

Сейчас я добавляю try-except блок вокруг всех set() и clear() звонков.

В Python27 documentation это не указано конкретно.

Я спросил об этом, потому что интуитивно не имеет смысла поднимать исключение, если вы установили уже установленный булевский флаг или очистили его.

+1

Вы попробовали? – MisterMiyagi

ответ

1

TLDR: Нет

truthiness из Event простой логический, охраняемый замок.

class Event: 
    """Class implementing event objects. 

    Events manage a flag that can be set to true with the set() method and reset 
    to false with the clear() method. The wait() method blocks until the flag is 
    true. The flag is initially false. 
    """ 
    def __init__(self): 
     self._cond = Condition(Lock()) 
     self._flag = False 

Установка и очистка просто получает блокировку и устанавливает значение. Не задействован переключение, а также не проверяется предыдущее значение. Никакое исключение не выбрасывается явно - вы можете, конечно, получить общие исключения, такие как KeyboardInterrupt.

+0

Спасибо за ответ. Я попробовал, он работал нормально. Но я из C фона, поэтому я думал, что это всегда так, то есть на всей платформе и т. Д. –

+0

@ Don'tYouWorryChild В общем, Python выбирает самый низкий общий знаменатель. Например, 'signal' обрабатываются только основным потоком, даже если базовая платформа разрешит иначе. Это не настоящее правило, но для основных модулей, таких как 'threading', вы можете поспорить, кто-то пожаловался бы на несоответствия между платформами. – MisterMiyagi