解決CPU密集型:如判斷10000個數是否是素數
下面的程序比較單線程 多線程 以及多進程在計算素數的時間差異
結論: 對於CPU密集型的計算,多線程會可能比單線程更耗時,多進程則時間更短
from logging import StreamHandler
import math
import time
from flask.app import Flask
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
PRIMES = [112272535095293] * 20
def is_prime(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(n)))
for i in range(3, sqrt_n+1, 2):
if n % i == 0:
return False
return True
def single_thread():
for number in PRIMES:
is_prime(number)
def multi_thread():
with ThreadPoolExecutor() as pool:
pool.map(is_prime, PRIMES)
def multi_process():
with ProcessPoolExecutor() as pool:
pool.map(is_prime, PRIMES)
if __name__ == '__main__':
start = time.time()
single_thread()
end = time.time()
print('single_thread, cost: ', end-start, "seconds")
start = time.time()
multi_thread()
end = time.time()
print('multi_thread, cost: ', end-start, "seconds")
start = time.time()
multi_process()
end = time.time()
print('multi_process, cost: ', end-start, "seconds")