class_docstr: The Rebuilder thread calls the rebuild command whenever an input file has been updated.
  
  It ensures there are never two rebuild commands in flight.
class_docstr_tok: ["The","Rebuilder","thread","calls","the","rebuild","command","whenever","an","input","file","has","been","updated",".","It","ensures","there","are","never","two","rebuild","commands","in","flight","."]
code: def run(self):
      while True:
          with self.cond:
              while self.should_continue and not self.want_rebuild:
                  self.cond.wait()
              if not self.should_continue:
                  return
              # Reset rebuild flag.
              self.want_rebuild = False
          # Rebuild.
          p = subprocess.Popen(["make", "build/sp-html.stamp"])
          ret = p.wait()
          if ret != 0:
              print("rebuild failed", file=sys.stderr)
          else:
              print("rebuild complete")
  
imports: import http.server
  import os
  import subprocess
  import sys
  import threading
  import time
  import watchdog
  import watchdog.events
  import watchdog.observers
label_desc: Use image node_id 2 for calling the Rebuilder obj's underlying member method code with example usage: obj.run() without return types