from multiprocessing import Process, Array, cpu_count from functools import reduce import sys LENGTH = int(sys.argv[1]) N_PROC = int(sys.argv[2]) def sum_up_range(start, end, output, pos): sum = 0 while start < end: sum += start start += 1 output[pos] = sum # create shared memory for N_PROC partialSums = Array('l', range(N_PROC)) CHUNK_SIZE = LENGTH//N_PROC print(f"Chunk size is {CHUNK_SIZE}, using {N_PROC} processes") children = [] for i in range(N_PROC-1): p = Process(target=sum_up_range, args=(i * CHUNK_SIZE, (i+1) * CHUNK_SIZE, partialSums, i)) p.start() children.append(p) # the parent process does the last slice sum_up_range((N_PROC-1) * CHUNK_SIZE, N_PROC * CHUNK_SIZE, partialSums, N_PROC-1) # wait for children for p in children: p.join() print(sum(partialSums))