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?"