code: def run(self):
          
          # if status is not None, we already had a run !
          if self.status:
              self.set_status('aborted')
              raise LimpydJobsException('This worker run is already terminated')
  
          self.set_status('starting')
  
          self.start_date = datetime.utcnow()
          if self.max_duration:
              self.wanted_end_date = self.start_date + self.max_duration
  
          must_stop = self.must_stop()
  
          if not must_stop:
  
              # get keys
              while not self.keys and not must_stop:
                  self.update_keys()
                  if not self.keys:
                      sleep(self.fetch_priorities_delay)
                  must_stop = self.must_stop()
  
              if not must_stop:
                  # wait for queues available if no ones are yet
                  self.requeue_delayed_jobs()
                  self.run_started()
                  self._main_loop()
  
          self.set_status('terminated')
          self.end_date = datetime.utcnow()
          self.run_ended()
          if self.terminate_gracefuly:
              self.stop_handling_end_signal()
docs: The main method of the worker. Will ask redis for list items via
          blocking calls, get jobs from them, try to execute these jobs, and end
          when needed.