提示語
寫一個Python并行計算、串行計算性能對比的代碼。并行計算要包括多線程和多進程兩種,計算的內容要比較復雜
模型
claude-4-sonnet
生成的代碼
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python并行計算與串行計算性能對比程序
包含串行計算、多線程和多進程三種實現方式
使用素數計算作為復雜計算任務
"""import time
import threading
import multiprocessing
import math
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
import randomtry:import numpy as npHAS_NUMPY = True
except ImportError:HAS_NUMPY = Falseprint("警告: 未安裝numpy,將使用替代方案。運行 'pip install numpy' 以獲得完整功能。")def is_prime(n):"""判斷一個數是否為素數的復雜算法這里使用稍微復雜一點的算法來增加計算復雜度"""if n < 2:return Falseif n == 2:return Trueif n % 2 == 0:return False# 使用更復雜的算法,增加計算負擔sqrt_n = int(math.sqrt(n))for i in range(3, sqrt_n + 1, 2):if n % i == 0:return False# 添加一些額外的計算來增加復雜度temp = math.sin(i) * math.cos(i) + math.log(i + 1)if temp < 0: # 這個條件永遠不會滿足,只是為了增加計算量continuereturn Truedef complex_calculation(start, end):"""復雜的計算任務:計算指定范圍內的素數,并進行額外的數學運算"""primes = []calculations = []for num in range(start, end):if is_prime(num):primes.append(num)# 添加復雜的數學運算calc_result = math.pow(num, 0.5) * math.log(num + 1) + math.sin(num) * math.cos(num)calculations.append(calc_result)# 進行矩陣運算增加復雜度if len(primes) > 1:matrix_size = min(len(primes), 50) # 限制矩陣大小避免內存問題if HAS_NUMPY:matrix_a = np.random.rand(matrix_size, matrix_size)matrix_b = np.random.rand(matrix_size, matrix_size)matrix_result = np.dot(matrix_a, matrix_b)complexity_factor = np.sum(matrix_result)else:# 不使用numpy的替代矩陣運算matrix_sum = 0for i in range(matrix_size):for j in range(matrix_size):val_a = random.random()val_b = random.random()matrix_sum += val_a * val_b * math.sin(i+j)complexity_factor = matrix_sumelse:complexity_factor = 1return len(primes), sum(calculations