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

uWSGI环境下pickle文件反序列化性能异常问题排查

pickle反序列化在uWSGI环境下的异常耗时问题

我需要反序列化约200个pickle文件,每个文件包含一个自定义类,类内有一个shape为500×32的numpy.ndarray,以及少量int、str类型的元数据,单个文件大小约50KB。

简化测试代码

#!venv/bin/python3

import random
import pickle

from pathlib import Path


# real live : around 200 files
filenames = ["file1.pickle", "file2.pickle"]
filepaths = [Path(fn) for fn in filenames]


# read all the files and keep them in a list of bytes
# This is for debug purposes : I want to be sure that the unpicking is 
# the time-consuming line.
str_datas = []
for filename in filepaths:
    str_data = filename.read_bytes()
    str_datas.append(str_data)

# shuffle for a reason, see below
random.shuffle(str_datas)

# unpickle the read data
datas = []
num = 0
for str_data in str_datas:
    num += 1
    print(num)
    data = pickle.loads(str_data)  # <---- this line takes 0.02s or 5s !! (see bellow)
    datas.append(data)

异常现象

  • 本地运行时一切正常,每次反序列化耗时约0.02s;
  • 在生产环境的uWSGI中运行时,每次执行都会有一个反序列化操作耗时长达5s(而非0.02s);
  • 由于对数据做了随机打乱,每次耗时超长的文件不同,但该操作始终出现在第55至63次反序列化之间;
  • 已排除IO问题(先将所有文件读取到内存后再进行反序列化),怀疑uWSGI存在隐式并行。

补充说明

  1. 通过打印日志可明显看到前60次输出几乎同时出现,第61次输出耗时明显更长;
  2. 已添加time.time()打印来确认耗时位置就在pickle.loads()这一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:36:07