from FromDevices import FromDevices from ToDevices import ToDevices from ModbusBase import ModbusHandler from loguru import logger from config import Config import logging import threading import sys deathBell = threading.Event() def exceptHook(args): global deathBell logger.error("Exception in thread caught: {}".format(args)) deathBell.set() logger.error("rang the death bell") logger.info("pv controller starting") config = Config.load_from_file() # configure loguru: only log INFO and above logger.remove() logger.add(sys.stdout, level=config.global_.log_level) modbusHandler = ModbusHandler(config) toDevicesThread = ToDevices(config, modbusHandler) toDevicesThread.start() logger.info("toDevices started") fromDevicesThread = FromDevices(config, modbusHandler) fromDevicesThread.start() logger.info("fromDevices started") threading.excepthook = exceptHook logger.info("Threading excepthook set") logger.info("pv controller is running") deathBell.wait() logger.error("pv controller is dying") toDevicesThread.stop() fromDevicesThread.stop() toDevicesThread.join() logger.error("toDevices joined") fromDevicesThread.join() logger.error("fromDevices joined") logger.error("pv controller is terminated")