code: def check_bcr_catchup(self):
          
          logger.debug(f"Checking if BlockRequests has caught up {len(BC.Default().BlockRequests)}")
  
          # test, perhaps there's some race condition between slow startup and throttle sync, otherwise blocks will never go down
          for peer in self.Peers:  # type: NeoNode
              peer.stop_block_loop(cancel=False)
              peer.stop_peerinfo_loop(cancel=False)
              peer.stop_header_loop(cancel=False)
  
          if len(BC.Default().BlockRequests) > 0:
              for peer in self.Peers:
                  peer.keep_alive()
                  peer.health_check(HEARTBEAT_BLOCKS)
                  peer_bcr_len = len(peer.myblockrequests)
                  # if a peer has cleared its queue then reset heartbeat status to avoid timing out when resuming from "check_bcr" if there's 1 or more really slow peer(s)
                  if peer_bcr_len == 0:
                      peer.start_outstanding_data_request[HEARTBEAT_BLOCKS] = 0
  
                  print(f"{peer.prefix} request count: {peer_bcr_len}")
                  if peer_bcr_len == 1:
                      next_hash = BC.Default().GetHeaderHash(self.CurrentBlockheight + 1)
                      print(f"{peer.prefix} {peer.myblockrequests} {next_hash}")
          else:
              # we're done catching up. Stop own loop and restart peers
              self.stop_check_bcr_loop()
              self.check_bcr_loop = None
              logger.debug("BlockRequests have caught up...resuming sync")
              for peer in self.Peers:
                  peer.ProtocolReady()  # this starts all loops again
                  # give a little bit of time between startup of peers
                  time.sleep(2)
docs: we're exceeding data request speed vs receive + process