Source code for mpc_parallel

from tqdm import tqdm
from tqdm import tqdm_notebook

import multiprocessing as mp

class dummy_meas(object):
    def __init__(self,name='dummy',val=0,sensitivity_list=[]):
        self.name = name
        self.model_value = val
        self.sensitivity_list = sensitivity_list
    def evaluate(self):
        return self.model_value
    def evaluate_sensitivity(self):
        pbar = tqdm(total=1)
        pbar.close()
        return self.sensitivity_list

def evaluate(measurement):
    #print measurement.name
    #print measurement.model_value
    #print 'running model'
    measurement.evaluate()
    #print measurement.model_value,'\n'
    #print
    return measurement.name,measurement.model_value

def sensitivity(measurement):
    #pbar.update()
    #if not(measurement.name == 'dummy'):
    if 'ign' in measurement.name:
        print(measurement.model.initial_timestep)
        measurement.model.optimal_timestep()
        print(measurement.model.initial_timestep)
    
    measurement.evaluate_sensitivity()
    return measurement.name,measurement.model_value,measurement.sensitivity_list
    
[docs]def evaluate_parallel(project,nWorkers): pool = mp.Pool(processes=nWorkers) for measurement in project.measurement_list: print(measurement.name) #Blank the chemistry in order to pickle the measurement for parallelization measurement.model.blank_chemistry() outputs = [] pbar = tqdm_notebook(project) for out in pool.imap_unordered(evaluate,project.measurement_list): outputs += [out] if not(out[0] == 'dummy'): pbar.update() #outputs = pool.map(evaluate,project.measurement_list) pool.close() pool.join() return outputs
[docs]def sensitivity_parallel(project,nWorkers): pool = mp.Pool(processes=nWorkers) for measurement in project.measurement_list: #print measurement.name #Blank the chemistry in order to pickle the measurement for parallelization measurement.model.blank_chemistry() measurement.model.tqfunc = tqdm_notebook dummy_list = [] for i in range(nWorkers): dummy_list += [dummy_meas()] #for meas in dummy_list: #print meas.name full_list = dummy_list + project.measurement_list outputs = [] pbar = tqdm_notebook(project) for out in pool.imap_unordered(sensitivity,full_list): outputs += [out] if not(out[0] == 'dummy'): pbar.update() pbar.close() pool.close() pool.join() #outputs = map(sensitivity,project.measurement_list) return outputs