class_docstr: A worker manager which spawns a new thread for each worker. 
docstr: Reads the result from the worker. 
docstr_tok: ["Reads","the","result","from","the","worker","."]
code: def _read_result_from_worker_and_update(self, worker_id):
      """Reads the result from the worker."""
      # pylint: disable=maybe-no-member
      # Read the file
      result_file_name = self._get_result_file_name_for_worker(
          worker_id
      )
      result_qinfo = self._read_result_from_file(result_file_name)
      saved_qinfo = self.qinfos_in_progress[worker_id]
      # Now update the relevant qinfo and put it to latest_results
      if isinstance(result_qinfo, Namespace):
          assert self.func_callers_for_each_worker[
              worker_id
          ].domain.members_are_equal(
              result_qinfo.point, saved_qinfo.point
          )
          qinfo = result_qinfo
      elif result_qinfo == EVAL_ERROR_CODE:
          qinfo = saved_qinfo
          qinfo.val = EVAL_ERROR_CODE
      else:
          raise ValueError(
              "Could not read qinfo object: %s." % (str(qinfo))
          )
      qinfo.receive_time = (
          self.experiment_designer.get_curr_spent_capital()
      )
      qinfo.eval_time = qinfo.receive_time - qinfo.send_time
      if not hasattr(qinfo, "true_val"):
          qinfo.true_val = qinfo.val
      self.latest_results.append(qinfo)
      # Update receive time
      self.last_receive_times[worker_id] = qinfo.receive_time
      # Delete the file.
      os.remove(result_file_name)
      # Delete content in a working directory.
      shutil.rmtree(self.working_dir_names[worker_id])
      # Add the worker to the list of free workers and clear qinfos in progress.
      self.worker_processes[worker_id].terminate()
      self.worker_processes[worker_id] = None
      self.qinfos_in_progress[worker_id] = None
      self.func_callers_for_each_worker[worker_id] = None
      self.free_workers.add(worker_id)
  
imports: from __future__ import print_function
  from __future__ import division
  from argparse import Namespace
  from multiprocessing import Process
  import numpy
  import os
  import pickle
  import shutil
  import time
  from .exd_utils import EVAL_ERROR_CODE
label_desc: Use image node_id 8 for calling the MultiProcessingWorkerManager obj's underlying member method code with example usage: obj._read_result_from_worker_and_update(worker_id) without return types