code: def add_pool_conf(
      self,
      process_index: int,
      label: str,
      internal_address: str,
      external_address: Union[str, List[str]],
      env: Dict = None,
      modules: List[str] = None,
      suspend_sigint: bool = False,
      use_uvloop: bool = False,
      logging_conf: Dict = None,
      kwargs: Dict = None,
  ):
      pools: Dict = self._conf["pools"]
      if not isinstance(external_address, list):
          external_address = [external_address]
      pools[process_index] = {
          "label": label,
          "internal_address": internal_address,
          "external_address": external_address,
          "env": env,
          "modules": modules,
          "suspend_sigint": suspend_sigint,
          "use_uvloop": use_uvloop,
          "logging_conf": logging_conf,
          "kwargs": kwargs or {},
      }
  
      mapping: Dict = self._conf["mapping"]
      for addr in external_address:
          mapping[addr] = internal_address
  
file_path: mars/mars/oscar/backends/config.py
imports: from typing import Union, List, Dict, Any
label_desc: Use image node_id 3 for calling the ActorPoolConfig obj's underlying member method code with example usage: obj.add_pool_conf(process_index, label, internal_address, external_address, env, modules, suspend_sigint, use_uvloop, logging_conf, kwargs) without return types