Следующий код — моя первая попытка быстро потерпеть неудачу, когда в функции гиперпараметра выдается Exception
.
К сожалению, сначала обрабатываются все данные, прежде чем вызывающая сторона получит исключение.
Что я могу сделать, чтобы весь процесс немедленно прекращался, если в вызываемой функции возникает ошибка (чтобы я мог быстрее исправить свою ошибку кодирования и т. д. и не ждать, пока все различные комбинации параметров будут обработаны/оптимизированы)?
Код:
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)
Что приводит к:
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()
с обратным вызовом ошибки: Многопроцессорность Python: прервать сопоставление при первой дочерней ошибке - person Darkonaut   schedule 23.07.2019