【cursor实战】分析python下并行、串行计算性能

发布于:2025-06-26 ⋅ 阅读:(21) ⋅ 点赞:(0)

提示语

写一个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 random

try:
    import numpy as np
    HAS_NUMPY = True
except ImportError:
    HAS_NUMPY = False
    print("警告: 未安装numpy,将使用替代方案。运行 'pip install numpy' 以获得完整功能。")


def is_prime(n):
    """
    判断一个数是否为素数的复杂算法
    这里使用稍微复杂一点的算法来增加计算复杂度
    """
    if n < 2:
        return False
    if n == 2:
        return True
    if 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:  # 这个条件永远不会满足,只是为了增加计算量
            continue
    return True


def 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 = 0
            for 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_sum
    else:
        complexity_factor = 1
    
    return len(primes), sum(calculations

网站公告

今日签到

点亮在社区的每一天
去签到