code: def start(self, work):
          
          assert threading.current_thread() == threading.main_thread()
          assert not self.state.running
          self.state.running = True
          self.thread = threading.Thread(target=work, args=(self.state,))
          self.thread.start()
          while self.state.running:
              try:
                  before = time.time()
                  self.update()
                  duration = time.time() - before
                  plt.pause(max(0.001, self.refresh - duration))
              except KeyboardInterrupt:
                  self.state.running = False
                  self.thread.join()
                  return
docs: Hand the main thread to the window and continue work in the provided
          function. A state is passed as the first argument that contains a
          `running` flag. The function is expected to exit if the flag becomes
          false. The flag can also be set to false to stop the window event loop
          and continue in the main thread after the `start()` call.