【发布时间】:2019-12-01 12:38:08
【问题描述】:
以下代码是我在超参数函数中抛出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 multiprocessing: abort map on first child error
标签: python python-multiprocessing hyperparameters