Source code for controller

"""
Main application controller.

:author: Martin Norbury (martin.norbury@gmail.com)
"""
import logging
_LOGGER = logging.getLogger(__name__)

import threading
import time
import signal


[docs]class Controller(threading.Thread): """ Main application controller. """ def __init__(self, data_source, loop_period=0.1): super(Controller, self).__init__(daemon=True) self._data_source = data_source self._count = 0 self._loop_period = loop_period self._running = True self._data = None self._register_exit_handler()
[docs] def run(self, running_checker=None): running = running_checker if running_checker else lambda: self._running while running(): if not self._count % 10: _LOGGER.debug('Get data') self._data_source.update_data() _LOGGER.debug('Update hardware') self._data_source.update_hardware() self._count += 1 time.sleep(self._loop_period)
[docs] def stop(self): self._running = False
def _register_exit_handler(self): def signal_handler(signal, frame): self._data_source.close() self.stop() signal.signal(signal.SIGINT, signal_handler)