class_docstr: The heartbeat channel which monitors the kernel heartbeat.
  
  Note that the heartbeat channel is paused by default. As long as you start
  this channel, the kernel manager will ensure that it is paused and un-paused
  as appropriate.
docstr: This method is called in the ioloop thread when a message arrives.
  
  Subclasses should override this method to handle incoming messages.
  It is important to remember that this method is called in the thread
  so that some logic must be done to ensure that the application level
  handlers are called in the application thread.
code: def call_handlers(self, since_last_heartbeat: float) -> None:
      """This method is called in the ioloop thread when a message arrives.
  
      Subclasses should override this method to handle incoming messages.
      It is important to remember that this method is called in the thread
      so that some logic must be done to ensure that the application level
      handlers are called in the application thread.
      """
      pass
  
imports: import asyncio
  import atexit
  import time
  import typing
  from queue import Empty
  from threading import Event, Thread
  import zmq.asyncio
  from jupyter_core.utils import ensure_async
  from ._version import protocol_version_info
  from .channelsabc import HBChannelABC
  from .session import Session
label_desc: Use image node_id 10 for calling the HBChannel obj's underlying member method code with example usage: obj.call_handlers(since_last_heartbeat) without return types