class_docstr: Base class to build BackgroundJob classes.
  
  The derived classes must implement:
  
  - Their own __init__, since the one here raises NotImplementedError.  The
    derived constructor must call self._init() at the end, to provide common
    initialization.
  
  - A strform attribute used in calls to __str__.
  
  - A call() method, which will make the actual execution call and must
    return a value to be held in the 'result' field of the job object.
code: def run(self):
      try:
          self.status = BackgroundJobBase.stat_running
          self.stat_code = BackgroundJobBase.stat_running_c
          self.result = self.call()
      except:
          self.status = BackgroundJobBase.stat_dead
          self.stat_code = BackgroundJobBase.stat_dead_c
          self.finished = None
          self.result = (
              "<BackgroundJob died, call jobs.traceback() for details>"
          )
          self._tb = self._make_tb()
      else:
          self.status = BackgroundJobBase.stat_completed
          self.stat_code = BackgroundJobBase.stat_completed_c
          self.finished = True
  
imports: from __future__ import print_function
  import sys
  import threading
  from IPython import get_ipython
  from IPython.core.ultratb import AutoFormattedTB
  from logging import error
  from IPython.utils.py3compat import string_types
label_desc: Use image node_id 6 for calling the BackgroundJobBase obj's underlying member method code with example usage: obj.run() without return types