A simple test using Python 3.3
Sample Code
from __future__ import print_function from concurrent import futures import math import multiprocessing def is_prime(num): if num % 2 == 0: return False sqrt_num = int(math.floor(math.sqrt(num))) for i in range(3, sqrt_num + 1, 2): if num % i == 0: return False return True def prime_worker(count): return sorted(num for num in range(count) if is_prime(num)) def future_prime_worker(count): with futures.ProcessPoolExecutor(4) as executor: numbers = range(count) return sorted(num for num, prime in zip(numbers, executor.map(is_prime, numbers)) if prime) def multiprocess_prime_worker(count): pool = multiprocessing.Pool(4) numbers = range(count) return sorted(num for num, prime in zip(numbers, pool.map(is_prime, numbers)) if prime) if __name__ == '__main__': import timeit t = timeit.timeit("prime_worker(200000)", number=1, setup="from __main__ import prime_worker") print (t) t = timeit.timeit("multiprocess_prime_worker(200000)", number=1, setup="from __main__ import multiprocess_prime_worker") print (t) t = timeit.timeit("future_prime_worker(200000)", number=1, setup="from __main__ import future_prime_worker") print (t)
Result
1.1414704178459942 0.7401300449855626 88.23592492006719
References:
concurrent.futures.ProcessPoolExecutor.map() doesn’t batch function arguments by chunks