code: def _get_or_create_channel(self):
      LOGGER.debug(f"call _get_or_create_channel, mq={self}")
      target = f"{self._host}:{self._port}"
      if self._check_alive():
          LOGGER.debug(f"channel alive, return, mq={self}")
          return
  
      LOGGER.debug(f"channel not alive, creating, mq={self}")
      self._channel = grpc.insecure_channel(
          target=target,
          options=[
              ("grpc.max_send_message_length", int((2 << 30) - 1)),
              ("grpc.max_receive_message_length", int((2 << 30) - 1)),
              ("grpc.max_metadata_size", 128 << 20),
              ("grpc.keepalive_time_ms", 7200 * 1000),
              ("grpc.keepalive_timeout_ms", 3600 * 1000),
              ("grpc.keepalive_permit_without_calls", int(False)),
              ("grpc.per_rpc_retry_buffer_size", int(16 << 20)),
              ("grpc.enable_retries", 1),
              (
                  "grpc.service_config",
                  '{ "retryPolicy":{ '
                  '"maxAttempts": 4, "initialBackoff": "0.1s", '
                  '"maxBackoff": "1s", "backoffMutiplier": 2, '
                  '"retryableStatusCodes": [ "UNAVAILABLE" ] } }',
              ),
          ],
      )
  
      self._stub = PrivateTransferTransportStub(self._channel)
      LOGGER.debug(f"channel created, mq={self}")
  
imports: import json
  import time
  from enum import Enum
  from logging import getLogger
  from typing import Dict, List, Any
  import grpc
  import numpy
  from fate.arch.federation.backends.osx import osx_pb2
  from fate.arch.federation.backends.osx.osx_pb2_grpc import PrivateTransferTransportStub
label_desc: Use image node_id 11 for calling the MQChannel obj's underlying member method code with example usage: obj._get_or_create_channel() without return types