code: def get_hnd(self, cache_id_obj, section=None, method=None):
          
          cache_file = self.get_file(cache_id_obj, section)
          if cache_file not in self._locks:
              try:
                  while not self._own.acquire(True):
                      pass
                  if cache_file not in self._locks:
                      if method is None:
                          m = self._method
                      else:
                          m = methods.get(method, None)
                      if m is None:
                          raise ValueError(
                              "unknown method: '{0}'".format(method))
                      res = _CacheLock(cache_file, cache_id_obj, self._full_base,
                                       self._quota, self._ram_quota,
                                       self._warnings, self.verbose, m)
                      self._locks[cache_file] = res
                  else:
                      res = None
              finally:
                  self._own.release()
          else:
              res = None
          if res is None:
              res = self._locks[cache_file]
              res.ensure_cache_id(cache_id_obj)
          self.enforce_ram_quota()
          return res
docs: Gets a handle for the given cache file with exclusive access.
             The handle is meant to be used in a resource block.
  
          Parameters
          ----------
          cache_id_obj : object
              An object uniquely identifying the cached resource. Note that some
              methods require the cache id object to be json serializable. The
              string representation of each element, however, has to reflect its
              content in a lossless way.
  
          method : string (optional; default=None)
              Defines the method used to encode the cached content. If None the
              default method of this cache is used. The method must be consistent
              between multiple accesses of the same cache resource.