remove multiprocessing

This commit is contained in:
petrucci4prez 2017-05-29 18:04:50 -04:00
parent b36536b48b
commit 5d7505d63a
2 changed files with 4 additions and 40 deletions

27
main.py
View File

@ -2,8 +2,6 @@
import os, time, signal, traceback import os, time, signal, traceback
import RPi.GPIO as GPIO import RPi.GPIO as GPIO
from queue import Queue
from multiprocessing.managers import BaseManager
from auxilary import fallbackLogger from auxilary import fallbackLogger
@ -18,7 +16,6 @@ def clean():
except NameError: except NameError:
pass pass
# TODO: this part is really wordy and makes me sad
try: try:
logger.info('Terminated root process - PID: %s', os.getpid()) logger.info('Terminated root process - PID: %s', os.getpid())
logger.stop() logger.stop()
@ -27,26 +24,10 @@ def clean():
except Exception: except Exception:
printTrace(traceback.format_exc()) printTrace(traceback.format_exc())
try:
manager.__del__() # kill process 2
except NameError:
pass
except Exception:
printTrace(traceback.format_exc())
def sigtermHandler(signum, stackFrame): def sigtermHandler(signum, stackFrame):
logger.info('Caught SIGTERM') logger.info('Caught SIGTERM')
raise SystemExit raise SystemExit
class ResourceManager(BaseManager):
def __init__(self):
super().__init__()
self.register('Queue', Queue)
def __del__(self):
self.shutdown()
if __name__ == '__main__': if __name__ == '__main__':
try: try:
os.chdir(os.path.dirname(os.path.realpath(__file__))) os.chdir(os.path.dirname(os.path.realpath(__file__)))
@ -54,14 +35,8 @@ if __name__ == '__main__':
GPIO.setwarnings(False) GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) GPIO.setmode(GPIO.BCM)
manager = ResourceManager()
manager.start() # Child process 1
loggerQueue = manager.Queue() # used to buffer logs
ttsQueue = manager.Queue() # used as buffer for TTS Engine
from sharedLogging import MasterLogger from sharedLogging import MasterLogger
logger = MasterLogger(__name__, 'DEBUG', loggerQueue) logger = MasterLogger(__name__, 'DEBUG')
from notifier import criticalError from notifier import criticalError

View File

@ -1,16 +1,9 @@
import logging, os import logging, os
from subprocess import run, PIPE, CalledProcessError from subprocess import run, PIPE, CalledProcessError
from logging.handlers import TimedRotatingFileHandler, QueueListener, QueueHandler from logging.handlers import TimedRotatingFileHandler
from auxilary import fallbackLogger from auxilary import fallbackLogger
def SlaveLogger(name, level, queue):
logger = logging.getLogger(name)
logger.setLevel(getattr(logging, level))
logger.addHandler(QueueHandler(queue))
logger.propagate = False
return logger
class GlusterFS(): class GlusterFS():
def __init__(self, server, volume, mountpoint, options=None): def __init__(self, server, volume, mountpoint, options=None):
if not os.path.exists(mountpoint): if not os.path.exists(mountpoint):
@ -46,7 +39,7 @@ class GlusterFS():
raise SystemExit raise SystemExit
class MasterLogger(): class MasterLogger():
def __init__(self, name, level, queue): def __init__(self, name, level):
mountpoint = '/mnt/glusterfs/pyledriver' mountpoint = '/mnt/glusterfs/pyledriver'
self.fs = GlusterFS('192.168.11.39', 'pyledriver', mountpoint, 'backupvolfile-server=192.168.11.48') self.fs = GlusterFS('192.168.11.39', 'pyledriver', mountpoint, 'backupvolfile-server=192.168.11.48')
@ -70,18 +63,14 @@ class MasterLogger():
self.rotatingFile = TimedRotatingFileHandler(logdest + '/pyledriver-log', when='midnight') self.rotatingFile = TimedRotatingFileHandler(logdest + '/pyledriver-log', when='midnight')
self.rotatingFile.setFormatter(fileFormat) self.rotatingFile.setFormatter(fileFormat)
logging.basicConfig(level=getattr(logging, level), handlers=[QueueHandler(queue)]) logging.basicConfig(level=getattr(logging, level), handlers=[console, self.rotatingFile])
logger = logging.getLogger(name) logger = logging.getLogger(name)
# since the logger module sucks and doesn't allow me to init # since the logger module sucks and doesn't allow me to init
# a logger in a subclass, need to "fake" object inheritance # a logger in a subclass, need to "fake" object inheritance
for i in ['debug', 'info', 'warning', 'error', 'critical']: for i in ['debug', 'info', 'warning', 'error', 'critical']:
setattr(self, i, getattr(logger, i)) setattr(self, i, getattr(logger, i))
self.queListener = QueueListener(queue, console, self.rotatingFile)
self.queListener.start()
def stop(self): def stop(self):
self.queListener.stop()
self.rotatingFile.close() # must close file stream before unmounting self.rotatingFile.close() # must close file stream before unmounting
self.fs.unmount() self.fs.unmount()