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

共享构建Python vs静态构建Python的优势是什么?为何测试未显内存节省?

共享构建Python与静态构建Python的内存优势疑问

Python默认会构建静态库libpythonMAJOR.MINOR.a并将其静态链接到解释器中,而使用--enable-shared参数时,会生成共享库libpythonMAJOR.MINOR.so.1.0并动态链接到解释器。

我最初的认知是:共享构建版本肯定能大幅节省内存!于是做了如下假设:

# 共享构建版本
34K Jun 29 11:32 python3.9
21M Jun 29 11:32 libpython3.9.so.1.0

10个共享Python进程的内存占用=0.034M*10+21M≈21M

# 静态构建版本
22M Jun 27 23:45 python3.9

10个静态Python进程的内存占用=10*22M=220M
按这个计算共享版本完胜!

但实际测试后发现这个假设不成立:
测试文件test.py代码:

import time
i = 0
while i < 20:
        time.sleep(1)
        i += 1

print('done')

测试脚本mem_test.sh:

#! /bin/bash
for i in {1..1000}
do 
         ./python3.9 test.py &
done

运行共享版本时设置了export LD_LIBRARY_PATH=/home/tian/py3.9.13_share/lib,分别用两个版本运行脚本后,通过htop监控总内存占用,结果两者几乎一致。

后来了解到按需分页机制,才知道之前对静态Python内存占用的计算完全错误。

现在我有两个疑问:

  • 共享构建Python对比静态构建Python的优势到底是什么?
  • 还是共享构建确实能通过共享库节省部分内存,但我的测试场景太简单无法体现?

补充:

  • 官方Python Dockerfile普遍使用--enable-shared参数
  • pyenv社区也有相关讨论,但暂无明确答案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:18:27