class_docstr: Run a pyzmq ioloop in a thread to send and receive messages
      
docstr: Start the IOLoop thread
  
  Don't return until self.ioloop is defined,
  which is created in the thread
code: def start(self):
      """Start the IOLoop thread
  
      Don't return until self.ioloop is defined,
      which is created in the thread
      """
      self._start_event = Event()
      Thread.start(self)
      self._start_event.wait()
  
imports: from __future__ import absolute_import
  import atexit
  import errno
  import sys
  from threading import Thread, Event
  import time
  from zmq import ZMQError
  from zmq.eventloop import ioloop, zmqstream
  from traitlets import Type, Instance
  from jupyter_client.channels import HBChannel
  from jupyter_client import KernelClient
label_desc: Use image node_id 3 for calling the IOLoopThread obj's underlying member method code with example usage: obj.start() without return types