docs: def progress(self):
          """\
          Report progress to the Java side.
  
          This needs to flush the uplink stream, but too many flushes can
          disrupt performance, so we actually talk to upstream once per second.
          """
          now = time()
          if now - self.last_progress_t > 1:
              self.last_progress_t = now
              if self.status:
                  self.uplink.status(self.status)
                  self.status = None
              self.__spill_counters()
              self.uplink.progress(self.progress_value)
              self.uplink.flush()