              logger.debug("Joining Thread: '%s'", thread._name)  # pylint: disable=protected-access
              thread.join()
  
  
  class BackgroundGenerator(threading.Thread):
      """ Run a queue in the background. From:
          https://stackoverflow.com/questions/7323664/ """
 
</s> remove     def join_threads(self):
        """ Join the running threads """
        for thread in self.threads:
 </s> add     def join(self):
        """ Join the running threads, catching and re-raising any errors """
        logger.debug("Joining Threads: '%s'", self._name)
        for thread in self._threads:
            logger.debug("Joining Thread: '%s'", thread._name)  # pylint: disable=protected-access
            if thread.err:
                logger.error("Caught exception in thread: '%s'",
                             thread._name)  # pylint: disable=protected-access
                raise thread.err[1].with_traceback(thread.err[2])
        logger.debug("Joined all Threads: '%s'", self._name)
              logger.debug("Joining Thread: '%s'", thread._name)  # pylint: disable=protected-access
              thread.join()
            if thread.err:
                logger.error("Caught exception in thread: '%s'",
                             thread._name)  # pylint: disable=protected-access
                raise thread.err[1].with_traceback(thread.err[2])
        logger.debug("Joined all Threads: '%s'", self._name)
  
  
  class BackgroundGenerator(threading.Thread):
      """ Run a queue in the background. From:
          https://stackoverflow.com/questions/7323664/ """
keep add keep keep keep keep keep
 Logging (#541)

* Convert prints to logger. Further logging improvements. Tidy  up

* Fix system verbosity. Allow SystemExit

* Fix reload extract bug

* Child Traceback handling

* Safer shutdown procedure

* Add shutdown event to queue manager

* landmarks_as_xy > property. GUI notes + linting. Aligner bugfix

* fix FaceFilter. Enable nFilter when no Filter is supplied

* Fix blurry face filter

* Continue on IO error. Better error handling

* Explicitly print stack trace tocrash log

* Windows Multiprocessing bugfix

* Add git info and conda version to crash log

* Windows/Anaconda mp bugfix

* Logging fixes for training 
lib/multithreading.py