code: def _run_io_loop():
      if "asyncio" in sys.modules:
          # tornado may be using asyncio,
          # ensure an eventloop exists for this thread
          import asyncio
  
          asyncio.set_event_loop(asyncio.new_event_loop())
  
      ZmqWrapper._ioloop = ioloop.IOLoop()
      ZmqWrapper._ioloop.make_current()
      while ZmqWrapper._thread is not None:
          try:
              ZmqWrapper._start_event.set()
              utils.debug_log("starting ioloop...")
              ZmqWrapper._ioloop.start()
          except zmq.ZMQError as ex:
              if ex.errno == errno.EINTR:
                  logging.exception("Cannot start IOLoop - ZMQError")
                  continue
              else:
                  raise
  
file_path: tensorwatch/tensorwatch/zmq_wrapper.py
imports: import zmq
  import errno
  import pickle
  from zmq.eventloop import ioloop, zmqstream
  import zmq.utils.monitor
  import functools, sys, logging
  from threading import Thread, Event
  from .None import utils
  import weakref, logging
label_desc: Use image node_id 4 for calling the ZmqWrapper obj's underlying member method code with example usage: obj._run_io_loop() without return types