Here is what I wanted to do, but it is slower.
from multiprocessing import Process, Manager
from numpy import *
import time
def f(d,i):
d[i] += i
if __name__ == '__main__':
manager = Manager()
t = time.time()
d = manager.dict()
for i in range(100):
d[i] = array([0,0])
k = d.keys()
while len(k) >= 4:
p1 = Process(target=f, args=(d,k[0],))
p2 = Process(target=f, args=(d,k[1],))
p3 = Process(target=f, args=(d,k[2],))
p4 = Process(target=f, args=(d,k[3],))
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
k = k[4:]
else:
if len(k) == 4:
p1 = Process(target=f, args=(d,k[0],))
p2 = Process(target=f, args=(d,k[1],))
p3 = Process(target=f, args=(d,k[2],))
p4 = Process(target=f, args=(d,k[3],))
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
elif len(k) == 3:
p1 = Process(target=f, args=(d,k[0],))
p2 = Process(target=f, args=(d,k[1],))
p3 = Process(target=f, args=(d,k[2],))
p1.start()
p2.start()
p3.start()
p1.join()
p2.join()
p3.join()
elif len(k) == 2:
p1 = Process(target=f, args=(d,k[0],))
p2 = Process(target=f, args=(d,k[1],))
p1.start()
p2.start()
p1.join()
p2.join()
if len(k) == 1:
d[k[0]] += k[0]
print time.time()-t
print d
tt = time.time()
d = {}
for i in range(100):
d[i] = array([0,0])
for i in d:
d[i] += i
print time.time()-tt
print d
I will appreciate in case anyone can suggest improvement.
Thanks.