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

首次执行Python读pickle代码耗时超5秒,后续仅0.2秒,求原因及排查恶意软件

技术疑问

我将numpy ndarray以pickle格式存储在外部HDD中,编写代码读取所有文件并合并为总ndarray。在Linux环境下,开机后首次通过venv运行该代码耗时超5秒,后续执行仅需0.2秒。我最初怀疑是pycache的额外耗时,但不确定,想搞清楚:

  • 为何代码首次执行耗时远长于后续?
  • 是否需要担心恶意软件?

相关代码

read_pickle.py

#!/home/****/bin/python3
# coding=utf-8

from os import listdir
from os.path import isfile, join
import multiprocessing
import numpy as np
import pandas as pd
import time as t
from utilsC0 import read_pickle_from_file
from enums import *


def process(file):
    directory = "some localization" # external hdd
    path = directory + f"/{file}"
    arr = read_pickle_from_file(path)
    return arr


def f2():
    directory = "some localization" # external hdd
    onlyfiles = [f for f in listdir(directory) if isfile(join(directory, f))]

    with multiprocessing.Pool() as p: 
        result = p.map(process, onlyfiles)

    result = np.vstack(result)

    print("End f2")


if __name__ == "__main__":
    t1 = t.time()
    f2()
    t2 = t.time()
    print(f"{t2 - t1}")

main.sh

#!/usr/bin/env bash

source /home/***/bin/activate
python3 src/read_pickle.py
问题解答

首次执行耗时更长的原因

这大概率和__pycache__无关,主要是以下几个正常机制导致:

  1. 外部HDD的系统缓存:Linux会把近期访问的磁盘数据存入内存页缓存(page cache)。首次运行时,pickle文件需要从外部HDD实际读取,速度受限;后续运行时,数据已经在内存缓存中,直接读取内存的速度远快于磁盘。你可以通过执行sync; echo 3 > /proc/sys/vm/drop_caches清空缓存后再运行,会回到首次的慢速度,以此验证。
  2. 虚拟环境与库的初始化:首次激活venv并运行代码时,Python需要加载虚拟环境中的numpy、pandas等依赖库,包括动态链接库的加载、模块初始化,这些都需要时间。后续运行时,系统会缓存这些已加载的资源,启动速度大幅提升。
  3. 多进程启动开销:首次创建multiprocessing.Pool时,需要启动多个子进程,进程的创建、初始化存在固定开销;后续运行时,系统可能复用了进程资源或缓存了相关初始化数据,开销明显降低。

关于恶意软件的担忧

当前现象完全符合正常的系统缓存和程序初始化逻辑,没有迹象指向恶意软件。恶意软件通常会伴随异常CPU占用、磁盘读写、网络行为,或出现系统卡顿、文件莫名修改等异常。如果仍有顾虑,可以用top/htop监控运行时资源占用,或用clamav等工具扫描系统及文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:31