class_docstr: Invokes a gRPC method on multiple endpoints in parallel.
  This class aims to call gRPC methods without conversions between proto and python object.
  TensorParallelClient can be used for invocation with the conversions.
class_docstr_tok: ["Invokes","a","gRPC","method","on","multiple","endpoints","in","parallel",".","This","class","aims","to","call","gRPC","methods","without","conversions","between","proto","and","python","object",".","TensorParallelClient","can","be","used","for","invocation","with","the","conversions","."]
code: def __init__(self, host, ports):
      # Assumption: target services are all on the same host
      self.stubs = []
      for port in ports:
          channel = create_channel(host, port)
          stub = modelresponse_pb2_grpc.ModelResponseStub(channel)
          self.stubs.append(stub)
  
      self.asyncio_loop = asyncio.get_event_loop()
  
imports: import asyncio
  import queue
  import sys
  import threading
  from concurrent import futures
  from typing import Dict
  import grpc
  from google.protobuf import empty_pb2
  from mii.backend.client import create_channel
  from mii.constants import GenerationFinishReason, GRPC_MAX_MSG_SIZE, TERMINATE_METHOD, LB_MAX_WORKER_THREADS, SERVER_SHUTDOWN_TIMEOUT, STREAM_RESPONSE_QUEUE_TIMEOUT
  from mii.grpc_related.proto import modelresponse_pb2_grpc
  from mii.grpc_related.task_methods import TASK_METHODS_DICT, TaskMethods
label_desc: Use image node_id 1 to create a new ParallelStubInvoker object  with example: obj = ParallelStubInvoker(host, ports)