def load_module(module, hotword, config, lang, loop): LOG.info('Loading "{}" wake word via {}'.format(hotword, module)) instance = None complete = MonotonicEvent() def initialize(): nonlocal instance, complete try: if module in HotWordFactory.CLASSES: clazz = HotWordFactory.CLASSES[module] else: clazz = load_wake_word_plugin(module) LOG.info('Loaded the Wake Word plugin {}'.format(module)) instance = clazz(hotword, config, lang=lang) except TriggerReload: complete.set() sleep(0.5) loop.reload() except NoModelAvailable: LOG.warning('Could not found find model for {} on {}.'.format( hotword, module )) instance = None except Exception: LOG.exception( 'Could not create hotword. Falling back to default.') instance = None complete.set() Thread(target=initialize, daemon=True).start() if not complete.wait(INIT_TIMEOUT): LOG.info('{} is taking too long to load'.format(module)) complete.set() return instance
def test_wait_set_with_timeout(self): wait_result = False event = MonotonicEvent() def wait_event(): nonlocal wait_result wait_result = event.wait(30) wait_thread = Thread(target=wait_event) wait_thread.start() sleep(0.1) event.set() wait_thread.join() self.assertTrue(wait_result)
def test_wait_set(self): event = MonotonicEvent() event.set() self.assertTrue(event.wait())