from MeterPublish import MeterPublish from RelaisPublish import RelaisPublish from RelaisSubscribe import RelaisSubscribe from ModbusBase import ModbusHandler from loguru import logger import logging import argparse import configparser import threading l = logging.getLogger() for h in l.handlers: l.removeHandler(h) 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") parser = argparse.ArgumentParser(description="pv controller") parser.add_argument('--config', '-f', help='Config file, default is $pwd/config.ini', required=False, default='./config.ini') args = parser.parse_args() config = configparser.ConfigParser() config.read(args.config) modbusHandler = ModbusHandler(config) relaisSubscribeThread = RelaisSubscribe(config, modbusHandler) relaisSubscribeThread.start() logger.info("relaisSubscribe started") meterPublishThread = MeterPublish(config, modbusHandler) meterPublishThread.start() logger.info("meterPublishThread started") relaisPublishThread = RelaisPublish(config, modbusHandler) relaisPublishThread.start() logger.info("relaisPublishThread started") threading.excepthook = exceptHook logger.info("Threading excepthook set") logger.info("pv controller is running") deathBell.wait() logger.error("pv controller is dying") relaisSubscribeThread.stop() meterPublishThread.stop() relaisPublishThread.stop() relaisSubscribeThread.join() logger.error("relaisSubscribe joined") meterPublishThread.join() logger.error("meterPublishThread joined") relaisPublishThread.join() logger.error("relaisPublishThread joined") logger.error("pv controller is terminated")