code: def open(self):
      # initialize receive, send threads.
      self.is_running = True
      self.receive_queue = Queue()
      self.receive_thread = threading.Thread(target=self._receive_loop)
      self.receive_thread.start()
      self.send_queue = Queue()
      self.send_thread = threading.Thread(target=self._send_loop)
      self.send_thread.start()
  
      self._inner_open()
  
      client_info = {
          "isReady": True,
          "runnerId": self.args.runner_id,
          "expId": self.args.exp_id,
      }
      nni_log(
          LogType.Info,
          "Channel: send ready information %s" % client_info,
      )
      self.send(CommandType.Initialized, client_info)
  
imports: import json
  import threading
  import time
  from abc import ABC, abstractmethod
  from queue import Empty, Queue
  from .log_utils import LogType, nni_log
  from .commands import CommandType
label_desc: Use image node_id 6 for calling the BaseChannel obj's underlying member method code with example usage: obj.open() without return types