50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
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)) |