Skip to content Skip to sidebar Skip to footer

How To Access The Result Of A Function Called In A Multiprocessing Process?

I am runnning this code : import random import multiprocessing import time def list_append(count, id): out_list = [] for i in range(count): out_list.append(random

Solution 1:

You need to use data structures that can be shared between processes:

deflist_append(count, id, res):
    #                      ^^^
    out_list = []
    for i inrange(count):
        out_list.append(random.random())
    res[id] = out_list  # <------if __name__ == "__main__":
    size = 10000000
    procs = 2   
    manager = multiprocessing.Manager()  # <---
    res = manager.dict()                 # <---
    jobs = []
    for i inrange(0, procs):
        process = multiprocessing.Process(target=list_append,args=(size, i, res))
        #                                                                   ^^^^
        jobs.append(process)

    for j in jobs:
        r = j.start()

    for j in jobs:
        j.join()

    print"List processing complete."# now `res` will contain results

As avenet commented, using multiprocessing.Pool will be simpler:

deflist_append(args):
    count, id = args
    out_list = []
    for i inrange(count):
        out_list.append(random.random())
    return out_list

if __name__ == "__main__":
    size = 10000000
    procs = 2

    pool = multiprocessing.Pool(procs)
    res = pool.map(list_append, [(size, i) for i inrange(procs)])
    pool.close()
    pool.join()

    print"List processing complete."# print res

Post a Comment for "How To Access The Result Of A Function Called In A Multiprocessing Process?"