Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
75 views
in Technique[技术] by (71.8m points)

python - How to paralllelize this nested loop

I'm using joblib with Dask to parallellize my code that has the following loop structure:

def main():
    for semtype in semtypes:
        test = get_valid_systems(systems, semtype)
        expressions = get_ensemble_pairs(test)
    
        for c in expressions:

            <do stuff>

The first attempt was to rewrite it with the inner loop as:

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)

which work fine.

Now, I'd like to add both loops, as in:

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)

However, I'm getting an error that name 'semtype' is not defined. I'm assuming this is a scoping issue wrt the function calls in my Paraallel statement. I'm not quite sure how to deal with this?

question from:https://stackoverflow.com/questions/65877057/how-to-paralllelize-this-nested-loop

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The outer most loop should come first.

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)))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...