def run(self): """ """ logger.info("Starting %i simulations on %i core" % \ (self.nsimu, self.ncore)) if in_ipython(): parallel = False else: parallel = True if parallel and os.name == 'posix': os.system("taskset -p 0xff %d" % os.getpid()) params = [self.paramtree, self.measuretree, self.verbose] all_params = [] for i in range(self.nsimu): all_params.append([i, self.raw_results_path] + params) queue = Queue() self.start_time = time.time() p = Pool(self.ncore, run_init, [queue], maxtasksperchild=4) p.map_async(run_one, all_params, chunksize=1) # Monitoring simulations done = False simu_ids = range(self.nsimu) while not done: mess = queue.get() if mess["state"] == "stop": simu_ids.remove(mess["id"]) self.log_progress(len(simu_ids)) if not simu_ids: done = True self.total_time = time.time() - self.start_time p.close() results_size = get_folder_size(self.results_path) logger.info("Simulations are done") logger.info("Results are stored in %s (%s MB)" % (self.results_path, results_size)) self.create_log() del p del queue gc.collect()
def create_log(self): """ Create logfile in results folder """ log = {} log["name"] = self.name log["duration"] = self.paramtree.absolute_dic['span'] log["dt"] = self.paramtree.absolute_dic['dt'] log["num_steps"] = int(log["duration"] / log["dt"]) log["number_of_simulations"] = self.nsimu log["number_of_simulations"] = self.nsimu log["spent_time"] = time.strftime('%H:%M:%S', time.gmtime(self.total_time)) log["results_folder_size_in_MB"] = get_folder_size(self.results_path) f = open(os.path.join(self.results_path, "simu.log"), 'w') f.write(json.dumps(log, sort_keys=True, indent=4)) f.close()