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
pool.apply_async()with error-callback here: Python multiprocessing: abort map on first child error