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

Python不同CPU下包导入耗时测试:Pycharm首二次运行差异问询

耗时差异原因

你遇到的两次运行导入耗时差距大的问题,主要来自两层缓存:

  1. Python字节码缓存:首次导入模块时,Python会把.py源码编译为字节码文件存储到对应目录的__pycache__文件夹下,后续导入直接读取预编译的字节码,跳过编译步骤。
  2. 操作系统文件页缓存:首次导入时需要从硬盘读取第三方库对应的源码、动态链接库(Linux下的.so、Windows下的.pyd)等文件,操作系统会自动把读取过的文件暂存在内存的页缓存区,第二次运行时直接从内存读取文件,速度远快于硬盘读取。

注:你是两次启动独立的Python进程运行脚本,Python进程级的sys.modules导入缓存不会跨进程生效,因此不是该差异的诱因。

解决方案

方案1:每次测试前清空系统页缓存(最准确,适合测真实冷启动耗时)

  • Linux环境:每次运行测试脚本前,使用root权限执行命令即可清空全部文件页缓存,保证每次都是从硬盘读取文件:
    sync && echo 3 > /proc/sys/vm/drop_caches
    
  • Windows环境:可以使用微软官方的EmptyStandbyList工具执行缓存清空操作,也可以手动读写几个GB级的无关大文件把原有缓存挤掉,保证每次测试的硬盘读取条件一致。

方案2:统一测热启动耗时

如果你不需要测试冷启动的真实导入速度,只需要保证不同CPU的测试结果有对比性,可以统一取第二次及之后的热启动耗时,所有测试环境都遵循相同流程即可(比如每次测试前先运行一次脚本预热,再取第二次的运行结果)。

其他辅助优化配置

  • 运行脚本时添加-B参数,即python -B 测试脚本名.py,可以禁止Python生成.pyc字节码缓存;也可以提前删除所有相关库目录下的__pycache__文件夹,排除字节码缓存的干扰。
  • 测试前关闭CPU睿频、节能模式,固定CPU运行频率,避免CPU频率波动导致的耗时误差。
  • 如果是在同一个Python进程内多次测试导入,可以在每次导入后手动清理sys.modules中的对应模块及子模块,示例逻辑如下:
    import sys
    # 导入torch后清理缓存
    for mod_name in list(sys.modules.keys()):
        if mod_name == 'torch' or mod_name.startswith('torch.'):
            del sys.modules[mod_name]
    
    注意该方法仅能模拟进程内的重复导入场景,和实际新进程启动导入的场景有差异,结果仅作参考。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:36:02