diff --git a/scripts/spartan/Worker.py b/scripts/spartan/Worker.py index 1cbda37..34349e0 100644 --- a/scripts/spartan/Worker.py +++ b/scripts/spartan/Worker.py @@ -409,8 +409,6 @@ class Worker: if self.master is True: return -1 - logger.info(f"benchmarking worker '{self.uuid}'") - def ipm(seconds: float) -> float: """ Determines the rate of images per minute. @@ -446,7 +444,7 @@ class Worker: f"minute\n") results.append(sample_ipm) elif i == warmup_samples - 1: - logger.info(f"{self.uuid} finished warming up\n") + logger.debug(f"{self.uuid} finished warming up\n") # average the sample results for accuracy ipm_sum = 0 @@ -454,7 +452,7 @@ class Worker: ipm_sum += ipm avg_ipm = math.floor(ipm_sum / samples) - logger.info(f"Worker '{self.uuid}' average ipm: {avg_ipm}") + logger.debug(f"Worker '{self.uuid}' average ipm: {avg_ipm}") self.avg_ipm = avg_ipm # noinspection PyTypeChecker self.response = None diff --git a/scripts/spartan/World.py b/scripts/spartan/World.py index 65bec29..241b960 100644 --- a/scripts/spartan/World.py +++ b/scripts/spartan/World.py @@ -238,6 +238,7 @@ class World: t = Thread(target=benchmark_wrapped, args=(worker, ), name=f"{worker.uuid}_benchmark") benchmark_threads.append(t) t.start() + logger.info(f"benchmarking worker '{worker.uuid}'") # wait for all benchmarks to finish and update stats on newly benchmarked workers if len(benchmark_threads) > 0: @@ -253,6 +254,8 @@ class World: # save benchmark results to workers.json json.dump(workers_info, worker_info_file, indent=3) + logger.info(self.speed_summary()) + def get_current_output_size(self) -> int: """ @@ -266,19 +269,25 @@ class World: return num_images - # TODO broken - def print_speed_stats(self): + def speed_summary(self) -> str: """ - Prints workers by their ipm in descending order. + Returns string listing workers by their ipm in descending order. """ workers_copy = copy.deepcopy(self.workers) + workers_copy.sort(key=lambda w: w.avg_ipm, reverse=True) + + total_ipm = 0 + for worker in workers_copy: + total_ipm += worker.avg_ipm i = 1 - workers_copy.sort(key=lambda w: w.avg_ipm, reverse=True) - print("Worker speed hierarchy:") + output = "World composition:\n" for worker in workers_copy: - print(f"{i}. worker '{worker}' - {worker.avg_ipm} ipm") + output += f"{i}. '{worker.uuid}'({worker}) - {worker.avg_ipm:.2f} ipm\n" i += 1 + output += f"total: ~{total_ipm:.2f} ipm" + + return output def __str__(self): # print status of all jobs