class_docstr: An Analysis is the application of a particular pipeline of modules to a
  set of images to produce measurements.
  
  Multiprocessing for analyses is handled by multiple layers of threads and
  processes, to keep the GUI responsive and simplify the code.  Threads and
  processes are organized as below.  Display/Interaction requests and
  Exceptions are sent directly to the pipeline listener.
  
  +------------------------------------------------+
  |           CellProfiler GUI/WX thread           |
  |                                                |
  +- Analysis() methods down,  Events/Requests up -+
  |                                                |
  |       AnalysisRunner.interface() thread        |
  |                                                |
  +----------------  Queues  ----------------------+
  |                                                |
  |  AnalysisRunner.jobserver()/announce() threads |
  |                                                |
  +----------------------------------------------- +
  |              zmqrequest.Boundary()             |
  +---------------+----------------+---------------+
  |     Worker    |     Worker     |   Worker      |
  +---------------+----------------+---------------+
  
  Workers are managed by class variables in the AnalysisRunner.
docstr: Verify that an analysis is running, allowing the GUI to recover even
  if the AnalysisRunner fails in some way.
  
  Returns True if analysis is still running (threads are still alive).
code: def check_running(self):
      """Verify that an analysis is running, allowing the GUI to recover even
      if the AnalysisRunner fails in some way.
  
      Returns True if analysis is still running (threads are still alive).
      """
      with self.runner_lock:
          if self.analysis_in_progress:
              return self.runner.check()
          return False
  
file_path: CellProfiler/src/subpackages/core/cellprofiler_core/analysis/_analysis.py
imports: import gc
  import threading
  import uuid
  from ._runner import Runner
  from ..measurement import Measurements
label_desc: Use image node_id 6 for calling the Analysis obj's underlying member method code with example usage: obj.check_running() and returns: False, self