Пример #1
0
def evaluate(run_identifier, control_params, params, function_to_evaluate, out_folder, force = False):
  try:
    experiment_db = ExperimentDB(out_folder, function_to_evaluate.__name__, run_identifier, dump_also_as_json=True)
    previous_result = experiment_db.get_experiment_result(params)
    
    if previous_result is not None and not force:
      print("already_exists:", function_to_evaluate.__name__ + " for", run_identifier, "with", params)
      return previous_result
    else:
      print(function_to_evaluate.__name__ + " for", run_identifier, "with", params)
      result_q = Queue()
      p = Process(target=function_to_evaluate, args=(result_q, control_params, params))
      p.start()
      p.join() # this blocks until the process terminates
      
      try:
        res = result_q.get_nowait()
      except Empty:
        print("no result available for this call. the process most likely failed with %s" % str(p.exitcode))
        res = None
      
      experiment_db.add_experiment(control_params, params, res)
      return (control_params, params, res)
  except:
    raise