docstr: Actions taken at shutdown by the kernel, called by python's atexit.
          
docstr_tok: ["Actions","taken","at","shutdown","by","the","kernel",",","called","by","python","'s","atexit","."]
code: def _at_shutdown(self):
      """Actions taken at shutdown by the kernel, called by python's atexit."""
      # io.raw_print("Kernel at_shutdown") # dbg
      if self._shutdown_message is not None:
          self.session.send(
              self.iopub_socket,
              self._shutdown_message,
              ident=self._topic("shutdown"),
          )
          self.log.debug("%s", self._shutdown_message)
      [s.flush(zmq.POLLOUT) for s in self.shell_streams]
  
imports: from __future__ import print_function
  import sys
  import time
  import logging
  import uuid
  from datetime import datetime
  from signal import signal, default_int_handler, SIGINT
  import zmq
  from tornado import ioloop
  from zmq.eventloop.zmqstream import ZMQStream
  from traitlets.config.configurable import SingletonConfigurable
  from IPython.core.error import StdinNotImplementedError
  from ipython_genutils import py3compat
  from ipython_genutils.py3compat import unicode_type, string_types
  from ipykernel.jsonutil import json_clean
  from traitlets import Any, Instance, Float, Dict, List, Set, Integer, Unicode, Bool, observe, default
  from jupyter_client.session import Session
  from ._version import kernel_protocol_version
label_desc: Use image node_id 47 for calling the Kernel obj's underlying member method code with example usage: obj._at_shutdown() without return types