class_docstr: A Starcraft II environment.
  
  The implementation details of the action and observation specs are in
  lib/features.py
code: def close(self):
      logging.info("Environment Close")
      if hasattr(self, "_metrics") and self._metrics:
          self._metrics.close()
          self._metrics = None
      if hasattr(self, "_renderer_human") and self._renderer_human:
          self._renderer_human.close()
          self._renderer_human = None
  
      # Don't use parallel since it might be broken by an exception.
      if hasattr(self, "_controllers") and self._controllers:
          for c in self._controllers:
              c.quit()
          self._controllers = None
      if hasattr(self, "_sc2_procs") and self._sc2_procs:
          for p in self._sc2_procs:
              p.close()
          self._sc2_procs = None
  
      if hasattr(self, "_ports") and self._ports:
          portspicker.return_ports(self._ports)
          self._ports = None
  
      if hasattr(self, "_parallel") and self._parallel is not None:
          self._parallel.shutdown()
          self._parallel = None
  
      self._game_info = None
  
imports: import collections
  import copy
  import random
  import time
  from absl import logging
  from pysc2 import maps
  from pysc2 import run_configs
  from pysc2.env import enums
  from pysc2.env import environment
  from pysc2.lib import actions
  from pysc2.lib import features
  from pysc2.lib import metrics
  from pysc2.lib import portspicker
  from pysc2.lib import renderer_human
  from pysc2.lib import run_parallel
  from pysc2.lib import stopwatch
  from s2clientprotocol import sc2api_pb2
label_desc: Use image node_id 23 for calling the SC2Env obj's underlying member method code with example usage: obj.close() without return types