You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多进程多函数场景下加密算法性能测量的PID获取与优化

问题分析与解决方案

原代码核心问题

  • 多进程调用错误:target=Encryption() 会直接在主进程执行函数,而非子进程,导致PID传递完全失效
  • 多进程全局变量不共享:pid 和 running 无法跨进程同步状态
  • 函数调用错误:metric_collector 未定义,实际应为 cpuUsage
  • 语法错误:running=true 应为Python布尔值 running=True
  • timeit逻辑缺陷:未定义的加密函数参数(a,b,d)、外部变量注入方式错误,额外代码干扰性能测量

简洁可行的实现方案

采用线程替代进程做监控(线程开销远低于进程,且共享内存,无需复杂状态同步),同时确保timeit仅测量加密解密核心逻辑,最小化额外开销:

import sys
import random
import timeit
import psutil
import os
import time
from threading import Thread

def cpu_monitor(pid):
    """后台监控进程的CPU和内存占用"""
    p = psutil.Process(pid)
    while True:
        try:
            mem_usage = p.memory_info().rss / (1024 * 1024)
            cpu_percent = p.cpu_percent(interval=1)
            print(f'PID: {pid}\t|\tCPU Usage: {cpu_percent}%\t|\tMemory Usage: {mem_usage:.2f} MB')
        except psutil.NoSuchProcess:
            # 目标进程结束时自动停止监控
            break

def encryption_benchmark():
    pid = os.getpid()
    # 启动后台监控线程(daemon=True:主进程结束时自动终止)
    monitor_thread = Thread(target=cpu_monitor, args=(pid,), daemon=True)
    monitor_thread.start()

    # 生成测试数据集
    myList = [random.randint(-sys.maxsize, sys.maxsize) + random.random() for _ in range(1000)]
    
    # 替换为你实际的加密函数参数
    a, b, d = 1, 2, 3  

    print('Now running timeit function for speed metrics.')
    number = 1000
    # 正确注入timeit所需的变量和依赖
    setup = f'''
import homomorphic

myList = {myList!r}
a = {a!r}
b = {b!r}
d = {d!r}
'''
    enc_code = '''
for idx in range(len(myList)):
    myList[idx] = homomorphic.encryptMethod(a, b, myList[idx], d)
'''
    dec_code = '''
for idx in range(len(myList)):
    myList[idx] = homomorphic.decryptMethod(myList[idx])
'''

    # 仅测量加密+解密的核心逻辑时间
    total_time = timeit.timeit(setup=setup, stmt=enc_code + dec_code, number=number)
    
    # 输出性能指标
    avg_time_per_iter = total_time / number
    total_ops = number * len(myList)
    print(f'''
Average Time per Iteration:\t {avg_time_per_iter:.6f} seconds 
Total Time for {number} Iters:\t {total_time:.2f} seconds
Total Encrypted/Decrypted Values:\t {total_ops}
''')

if __name__ == '__main__':
    print('Beginning Metric Evaluation\n...\n')
    encryption_benchmark()

关键优化点

  1. 线程监控替代进程:避免多进程的内存隔离问题,直接传递当前进程PID即可,开销极低
  2. 精准性能测量:timeit仅执行加密解密逻辑,监控线程的后台操作不会干扰计时结果
  3. 自动状态管理:监控线程设为守护线程,主进程结束时自动停止,无需手动维护running信号
  4. 变量正确注入:用f-string格式化timeit的setup代码,确保测试数据和参数正确传入计时环境

内容的提问来源于stack exchange,提问作者lostInSpace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:20:34