code: def run(self):
          
          self.pre_run()
          first = True
          while self.runnable:
              self.pre_call_message()
  
              if first:
                  self.pre_first_call_message()
              
              message, payload = self.listener.get()
              getattr(self, message)(payload)
  
              if first:
                  first = False
                  self.post_first_call_message()
                  
              self.post_call_message()
  
          self.post_run()
docs: Run our loop, and any defined hooks...