Benjamin Lenglet
Benjamin Lenglet

Reputation: 53

Parallel Processing in Python with nested loop

Due to performance issue, i would like to run in parallel my function in python :

import multiprocessing as mp

source_nodes = [10413173,    10414530,   10414530,   10437199]
sink_nodes =  [10420346,     10438770,   10438711,   10414530,   10436258]
path =[]    


def createpath(source,sink):
    for i in source:
        for j in sink:
            path = path + list(nx.all_simple_paths(Directed_G,i,j))
    return path

From my understanding i must give 1 iterable to apply function. but my idea was to do something like :

results = [pool.apply(createpath, args=(source_nodes, sink_nodes))]

And then don't give any iterable object to applyfunction I managed to get it work, but i don't think it run on parallel.

Do you think i should include the apply function inside the first loop ?

Upvotes: 0

Views: 131

Answers (1)

Marek Justyna
Marek Justyna

Reputation: 224

from multiprocessing import Pool


source_nodes = [1,2,3,4,5,6]
sink_nodes =  [1,1,1,1,1,1,1,1,1]


def sum_values(parameter_tuple):
    source,sink, start, stop = parameter_tuple
    out = 0
    for i in range(start, stop):
        val_i = source[i]
        for j in sink:
            out += val_i*j
    return out

if __name__ == "__main__":
    params = (source_nodes, sink_nodes, 0, 6)
    print(sum_values(params))
    with Pool(2) as p:
        print(p.map(sum_values, [
            (source_nodes, sink_nodes, 0, 3),
            (source_nodes, sink_nodes, 3, 6),
        ]))

You can try to run this one. This runs parallel with map pattern on pool of 2 threads. In this case your output result is the sum of result of each process from pool.

Upvotes: 2

Related Questions