code: def close(self) -> None:
          
          if self._closed:
              return
          self._closed = True
          if self._instance_cache is not None:
              cached_val = self._instance_cache.pop(self.io_loop, None)
              # If there's an object other than self in the instance
              # cache for our IOLoop, something has gotten mixed up. A
              # value of None appears to be possible when this is called
              # from a destructor (HTTPClient.__del__) as the weakref
              # gets cleared before the destructor runs.
              if cached_val is not None and cached_val is not self:
                  raise RuntimeError("inconsistent AsyncHTTPClient cache")
docs: Destroys this HTTP client, freeing any file descriptors used.
  
          This method is **not needed in normal use** due to the way
          that `AsyncHTTPClient` objects are transparently reused.
          ``close()`` is generally only necessary when either the
          `.IOLoop` is also being closed, or the ``force_instance=True``
          argument was used when creating the `AsyncHTTPClient`.
  
          No other methods may be called on the `AsyncHTTPClient` after
          ``close()``.