+++ /dev/null
-import logging, logging.handlers, os, time, queue, threading
-
-# logging function
-class Logger:
- def __init__ (self):
- import __main__ as main
- self.name = os.path.basename(main.__file__)
- self.logger = logging.getLogger(self.name)
- self.logger.setLevel(logging.INFO)
- self.handler = logging.handlers.SysLogHandler(address = '/dev/log', facility = logging.handlers.SysLogHandler.LOG_LOCAL0)
- self.logger.addHandler(self.handler)
-
- def log (self, lvl, what):
- thestr = "%s[%d]: %s" % (self.name,os.getpid(),what)
- print (thestr)
- self.logger.log(lvl, thestr)
-
- def debug(self, what):
- self.log(logging.DEBUG, what)
- def info(self, what):
- self.log(logging.INFO, what)
- def warning(self, what):
- self.log(logging.WARNING, what)
- def error(self, what):
- self.log(logging.ERROR, what)
- def critical(self, what):
- self.log(logging.CRITICAL, what)
-
-logger = Logger()
-
-# Threaded callback class
-class ThreadFunction():
- _CALL = 0
- _TERM = 1
-
- def __init__(self, f):
- self._f = f
- self._q = queue.Queue()
- self._t = threading.Thread(target=self._thread_func)
- self._t.start()
-
- def _thread_func(self):
- while True:
- (cmd, data) = self._q.get()
- # run command
- if cmd == _CALL:
- try:
- self._f(*data)
- except Exception:
- logger.error("ThreadFunction: Got exception out of handler thread: %s" % str(e))
- elif cmd == _TERM:
- assert data is None
- break
- else:
- logger.error("ThreadFunction: Command %d does not exist" % cmd)
-
- def __call__(self, *arg):
- self._q.put((self._CALL, arg))
-
- def stop(self):
- self._q.put((_TERM, None))
- self._t.join()
-
-# Thread timer-repeater class: Call a function every <sleep_time> seconds
-class ThreadRepeater():
- def __init__(self, f, sleep_time):
- self._f = f
- self._stop = False
- self._sleep_time = sleep_time
- self._t = threading.Thread(target=self._thread_func)
- self._t.start()
-
- def _thread_func():
- while True:
- if self._stop:
- break
- self._f()
- time.sleep(sleep_time)
-
- def stop(self):
- self._stop = True
- self._t.join()