我正在使用带有 Dask 的 joblib 来并行化我的具有以下循环结构的代码:
def main():
for semtype in semtypes:
test = get_valid_systems(systems, semtype)
expressions = get_ensemble_pairs(test)
for c in expressions:
<do stuff>
第一次尝试是用内循环将其重写为:
if __name__ == '__main__':
for semtype in semtypes:
test = get_valid_systems(systems, semtype)
expressions = get_ensemble_pairs(test)
print('SYSTEMS FOR SEMTYPE', semtype, 'ARE', test)
with joblib.parallel_backend('dask'):
joblib.Parallel(verbose=10)(joblib.delayed(main)(c) for c in expressions)
哪个工作正常。
现在,我想添加两个循环,如下所示:
with joblib.parallel_backend('dask'):
joblib.Parallel(verbose=100)(joblib.delayed(main)(semtype, c) for c in get_ensemble_pairs(get_valid_systems(systems, semtype)) for semtype in semtypes)
但是,我收到了 name 'semtype' is not defined
的错误。我假设这是我的 Paraallel
语句中的函数调用的范围问题。我不太确定如何处理这个问题?
答案 0 :(得分:1)
最外面的循环应该先出现。
with joblib.parallel_backend('dask'):
joblib.Parallel(verbose=100)(joblib.delayed(main)(semtype, c) for semtype in semtypes for c in get_ensemble_pairs(get_valid_systems(systems, semtype)))