Example #1
0
    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()
Example #2
0
    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()