The following code is my first try to fail fast when in the hyperparameter function an Exception
is thrown.
Unfortunately, the whole data is processed first, before the caller receives the exception.
What can I do that the whole process is terminated immediately, if in the called function an error occurs (so that I can correct my coding bug etc. faster and do not have to wait until all different parameter combinations have be processed / optimized)?
The code:
from sklearn.model_selection import ParameterGrid
from multiprocessing import Pool
from enum import Enum
var1 = 'var1'
var2 = 'var2'
abc = [1, 2]
xyz = list(range(1_00_000))
pg = [{'variant': [var1],
'abc': abc,
'xyz': xyz, },
{'variant': [var2],
'abc': abc, }]
parameterGrid = ParameterGrid(pg)
myTemp = list(parameterGrid)
print('len(parameterGrid):', len(parameterGrid))
def myFunc(myParam):
if myParam['abc'] == 1:
raise ValueError('error thrown')
print(myParam)
pool = Pool(1)
myList = pool.map(myFunc, parameterGrid)
Which results in:
len(parameterGrid): 200002
{'abc': 2, 'variant': 'var1', 'xyz': 2}
{'abc': 2, 'variant': 'var1', 'xyz': 3}
{'abc': 2, 'variant': 'var1', 'xyz': 4}
{'abc': 2, 'variant': 'var1', 'xyz': 5}
{'abc': 2, 'variant': 'var1', 'xyz': 6}
.
.
.
{'abc': 2, 'variant': 'var1', 'xyz': 99992}
{'abc': 2, 'variant': 'var1', 'xyz': 99993}
{'abc': 2, 'variant': 'var1', 'xyz': 99994}
{'abc': 2, 'variant': 'var1', 'xyz': 99995}
{'abc': 2, 'variant': 'var1', 'xyz': 99996}
{'abc': 2, 'variant': 'var1', 'xyz': 99997}
{'abc': 2, 'variant': 'var1', 'xyz': 99998}
{'abc': 2, 'variant': 'var1', 'xyz': 99999}
ValueError: error thrown