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