class_docstr: Tracks pipeline progress and estimates time to completion 
docstr: Return our best estimate of the remaining duration, or None
  if we have no bases for guessing.
docstr_tok: ["Return","our","best","estimate","of","the","remaining","duration",",","or","None","if","we","have","no","bases","for","guessing","."]
code: def remaining_time_multiprocessing(self):
      """Return our best estimate of the remaining duration, or None
      if we have no bases for guessing."""
      if (self.end_times is None) or (self.num_received == 0):
          return (
              2 * self.elapsed_time()
          )  # We have not started the first module yet
      else:
          expected_per_job = (
              self.end_times[self.num_received] / self.num_received
          )
          return expected_per_job * (self.num_jobs - self.num_received)
  
file_path: CellProfiler/src/frontend/cellprofiler/gui/preferences_view/_progress_watcher.py
imports: import time
  import numpy
  import wx
label_desc: Use image node_id 12 for calling the ProgressWatcher obj's underlying member method code with example usage: obj.remaining_time_multiprocessing() and returns: unknown, unknown