Python 内存优化问题

2023-04-11 19:01:31 +08:00
 ChenJHua

我发现 import pymongo 就会占用 6M 内存。 我有 100 个独立运行的脚本,如果他们都需要 import pymongo ,那么就会产生 100*6=600M 内存。 可以实现一个 import 缓存,独立运行的脚本都可以优先复用缓存的包,缓存没有才重新导包。 想问问这个 import 缓存能实现吗

4232 次点击
所在节点    Python
59 条回复
raptor
2023-04-12 10:26:11 +08:00
说实话,就 600M 这点内存费这事干嘛,直接加内存不就完了么?又不是 600G……
wangxin13g
2023-04-12 10:30:19 +08:00
你省的这 600m 内存成本远远不如下一个接手这个项目的人浪费的工时值钱
CloveAndCurrant
2023-04-12 10:38:39 +08:00
说实话,如果真心在意这点内存,就换语言,换 golang ,可以优先对部分占内存较大的业务进行切换
anjiannian
2023-04-12 11:47:22 +08:00
写个 apiserver 提供 mongo 服务,脚本发请求就好了
mokiki
2023-04-12 13:03:38 +08:00
Linux 内核有压缩去重的功能,自己编译内核试试。
txy3000
2023-04-12 13:25:34 +08:00
600m 要不考虑升级一下配置?
fgwmlhdkkkw
2023-04-12 13:49:30 +08:00
@CloveAndCurrant 这跟语言有什么关系?你就是用汇编,不一样的进程也是各自独立的内存啊
zagfai
2023-04-12 14:45:13 +08:00
这个本质是复用问题,内存中可以复用的东西多得去了,全部尽可能复用的话,你 10G 系统跑起来可能都没几百 M ,
现在是内存不值钱,所以大家都拼命摊开来烧内存,而不是努力复用
houzhiqiang
2023-04-12 14:50:08 +08:00
不应该最多是 cpu 核心数个进程或者乘 2 个进程吗?为什么需要 100 个?
raymanr
2023-04-12 14:57:50 +08:00
直接给领导说优化不了, 要么完蛋, 要么你加内存
Oilybear
2023-04-12 16:22:47 +08:00
如果是单独一个进程的话 import 的是有缓存机制的,但是本身就是 600 个进程...我想不到什么好的方法?把访问 mongo 的部分抽出来做一个 work ,其他的进程使用 socker 或者什么请求这个 work 调用,然后等完拿结果?
lambdaq
2023-04-12 17:24:20 +08:00
import 不能实现,你得改造成 master - worker 才行。
winglight2016
2023-04-13 08:56:07 +08:00
真是诡异的优化思路,正常思路不是应该做 100 个脚本的重构吗?

为什么看到脚本里都有相同的 import 语句就认为可以重用,目的还是节约 600M 内存?

想节约内存就不要用 python 这种解释型语言啊?
CloveAndCurrant
2023-04-13 10:22:09 +08:00
@fgwmlhdkkkw 这和进程当然关有系,单进程 Python 这种万物皆对象的语言就是比 golang 占用内存多,golang 没有线程锁,也不用开那么多进程。自然用的就是内存少。
fgwmlhdkkkw
2023-04-13 10:38:01 +08:00
@CloveAndCurrant 杠还是你杠
CloveAndCurrant
2023-04-13 10:43:24 +08:00
@fgwmlhdkkkw 没有你会杠,也没有你懂,别人都不知道“不一样的进程也是各自独立的内存”,就你知道😂😂😂😂
linggaoyuan123
2023-04-16 22:11:08 +08:00
另外我不了解 pymongo 这个咋实现的..是包了一层 mongodb 的库?这个包的这个是静态库所以才会这样?
linggaoyuan123
2023-04-16 22:12:01 +08:00
如果是这样,那改称动态库不就好了.
mayli
2023-05-06 04:41:49 +08:00
Py 本身的原因不好弄 除非你抽象一个框架出来,然后脚本走 rpc. 这样应该是这种共享内存的最优解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/931691

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX