code: def run(self, postfunc=lambda: None):
          
          self._setup_sig_handler()
          try:
              self.job.start()
          finally:
              postfunc()
              self._reset_sig_handler()
docs: Run the jobs.
  
          postfunc() will be invoked after the jobs has run. It will be
          invoked even if the jobs are interrupted by a keyboard
          interrupt (well, in fact by a signal such as either SIGINT,
          SIGTERM or SIGHUP). The execution of postfunc() is protected
          against keyboard interrupts and is guaranteed to run to
          completion.