LczPtr 2020-02-14
import atexit import logging import os import signal import sys from logging.handlers import RotatingFileHandler logger = logging.getLogger() MAX = 10 * 1024 * 1024 BACK_UP_COUNT = 10 def setup_logging(): log_file = os.path.join(r'C:\\',"demo.log") logger.setLevel(logging.INFO) file_handler = RotatingFileHandler(log_file,"a",MAX,BACK_UP_COUNT) file_handler.setFormatter( logging.Formatter( "[%(asctime)%s] [%(process)d] [%(levelname)s] - %(module)s.%(funcName)s" "(%(filename)s:%(lineno)d) - %(message)s" ) ) logger.addHandler(file_handler) PID_FILE = "fmpid.pid" def write_pid(): with open(PID_FILE,"w") as f: f.write('%s\n'%(os.getpid())) def read_pid(): try: with open(PID_FILE) as f: pid = int(f.read().strip()) except Exception: pid = None return pid def remove_pid(): if os.path.exists(PID_FILE): os.remove(PID_FILE) def sig_handler(sig,frame): logger.warning("shutting down, got signal %d"%sig) remove_pid() sys.exit(0) def setup_application(): pid = read_pid() if pid: sys.stdout.write('processing is running...\n') sys.exit(0) setup_logging() write_pid() atexit.register(remove_pid) for sig in (signal.SIGTERM,signal.SIGINT): signal.signal(sig,sig_handler) def main(): setup_application() # 逻辑