def find_max_in_range(fname, frange): f = open(fname) n_max = 0 f.seek(frange[0]) while f.tell() < frange[1]: n = f.readline() if int(n) > n_max: n_max = int(n) f.close() return n_max --- def find_file_ranges(fname, chunks): f = open(fname) f.seek(0,2) fsize = f.tell() ranges = [] chunk_size = fsize // chunks start = 0 for i in range(chunks): f.seek(start + chunk_size) l = f.readline() end = min(start + chunk_size + len(l) - 1, fsize) ranges.append( (start, end) ) start = end + 1 f.close() return ranges --- from multiprocessing import Pool def find_max_in_range_wrapper(args): max_in_range = find_max_in_range(args[0], args[1]) print("Chunk %i-%i done. Max: %i" % (args[1][0], args[1][1], max_in_range)) return max_in_range --- franges = find_file_ranges(fname, nchunks) print("Dividing the file into %i chunks:" % nchunks) for frange in franges: print(" %i - %i" % (frange[0],frange[1])) print("\n") p = Pool(nchunks) args = zip([fname]*nchunks, franges) res = p.map(find_max_in_range_wrapper, args) print("\n") print("Maximum: %i" % (max(res))) --- >>> l = [1, 2, 3, 4] >>> map(lambda x: x*x, l) [1, 4, 9, 16] >>> filter(lambda x: x % 2 == 0, l) [2, 4] >>> reduce(lambda x, y: x + y, l, 0) 10 >>> --- franges = find_file_ranges(fname, nchunks) print("Dividing the file into %i chunks:" % nchunks) for frange in franges: print(" %i - %i" % (frange[0],frange[1])) print("\n") p = Pool(nchunks) args = zip([fname]*nchunks, franges) res = p.map(find_max_in_range_wrapper, args) print("\n") print("Maximum: %i" % (reduce(max, res)))