class_docstr: Launches nodes asynchronously in the background.
class_docstr_tok: ["Launches","nodes","asynchronously","in","the","background","."]
code: def __init__(
      self,
      provider,
      queue,
      pending,
      event_summarizer,
      node_provider_availability_tracker,
      session_name: Optional[str] = None,
      prom_metrics=None,
      node_types=None,
      index=None,
      *thread_args,
      **thread_kwargs,
  ):
      self.queue = queue
      BaseNodeLauncher.__init__(
          self,
          provider=provider,
          pending=pending,
          event_summarizer=event_summarizer,
          session_name=session_name,
          node_provider_availability_tracker=node_provider_availability_tracker,
          prom_metrics=prom_metrics,
          node_types=node_types,
          index=index,
      )
      threading.Thread.__init__(self, *thread_args, **thread_kwargs)
  
imports: import copy
  import logging
  import operator
  import threading
  import time
  import traceback
  from typing import Any, Dict, Optional
  from ray.autoscaler._private.node_provider_availability_tracker import NodeProviderAvailabilityTracker
  from ray.autoscaler._private.prom_metrics import AutoscalerPrometheusMetrics
  from ray.autoscaler._private.util import hash_launch_conf
  from ray.autoscaler.node_launch_exception import NodeLaunchException
  from ray.autoscaler.tags import NODE_KIND_WORKER, STATUS_UNINITIALIZED, TAG_RAY_LAUNCH_CONFIG, TAG_RAY_NODE_KIND, TAG_RAY_NODE_NAME, TAG_RAY_NODE_STATUS, TAG_RAY_USER_NODE_TYPE
label_desc: Use image node_id 1 to create a new NodeLauncher object from inherited base classes: BaseNodeLauncher, threading with example: obj = NodeLauncher(provider, queue, pending, event_summarizer, node_provider_availability_tracker, session_name, prom_metrics, node_types, index)