import concurrent.futures import time import multiprocessing num_cores = multiprocessing.cpu_count() def is_prime(num): if num <= 1: return False elif num <= 3: return True elif num%2 == 0 or num%3 == 0: return False i = 5 while i*i <= num: if num%i == 0 or num%(i+2) == 0: return False i += 6 return True def find_sum(num): sum_of_primes = 0 ix = 2 while ix <= num: if is_prime(ix): sum_of_primes += ix ix += 1 print("{} : Sum = {}".format(num, sum_of_primes)) return sum_of_primes def sum_primes_thread(nums): with concurrent.futures.ThreadPoolExecutor(max_workers = num_cores) as executor: executor.map(find_sum, nums) def sum_primes_process(nums): with concurrent.futures.ProcessPoolExecutor(max_workers = num_cores) as executor: executor.map(find_sum, nums) if __name__ == '__main__': nums = [1000000, 900000, 800000, 700000, 600000, 500000, 400000, 300000, 200000, 100000] print("Using multithreading (num_threads = num_cores):") start = time.time() sum_primes_thread(nums) print("Time taken = {0:.5f}".format(time.time() - start)) print("Using multiprocessing (num_processes = num_cores):") start = time.time() sum_primes_process(nums) print("Time taken = {0:.5f}".format(time.time() - start))