code: def start(self):
          
          self.history.append("Started on %s" % time.asctime())
          self.start_time = time.time()
  
          if not has_apscheduler:
              raise RuntimeError("Install apscheduler with pip")
  
          if has_sched_v3:
              self.sched.add_job(self.callback, "interval", **self.sched_options)
          else:
              self.sched.add_interval_job(self.callback, **self.sched_options)
  
          errors = self.flow.look_before_you_leap()
          if errors:
              self.exceptions.append(errors)
              return 1
  
          # Try to run the job immediately. If something goes wrong return without initializing the scheduler.
          self._runem_all()
  
          if self.exceptions:
              self.cleanup()
              self.send_email(msg="Error while trying to run the flow for the first time!\n %s" % self.exceptions)
              return 1
  
          try:
              self.sched.start()
              return 0
  
          except KeyboardInterrupt:
              self.shutdown(msg="KeyboardInterrupt from user")
              if ask_yesno("Do you want to cancel all the jobs in the queue? [Y/n]"):
                  print("Number of jobs cancelled:", self.flow.cancel())
  
              self.flow.pickle_dump()
              return -1
docs: Starts the scheduler in a new thread. Returns 0 if success.
          In standalone mode, this method will block until there are no more scheduled jobs.