6

我们正在编写一个内存紧张的系统。有多个 python 进程将导入同一组类。如果进程加载了无数个类并且每个进程消耗了几百兆,那么 10 个进程和我正在运行 gigs。有没有办法跨 python 进程“共享”类导入?

概括:

import classA # Process 1 : loads classA in memory
import classA # Process 2 : reuses what was loaded previously by Process 1

PS:我想要实现的是你会用.soC/C++ 中的模块做的事情。

4

2 回答 2

2

如果您的操作系统支持高效的写时复制 fork(很多都支持),那么至少可以节省一点内存。只需import在父级中创建所有内容,然后fork()创建所有子级。

请注意,如果您有许多小对象,则不会保存任何内容,因为需要写入对象的引用计数。但是,您可以使用属性字典等大型静态结构节省大量成本。

于 2012-09-28T02:16:39.750 回答
1

我不相信这在 python 的设计中是可能的。如果这很重要,您可能希望使用线程而不是单独的进程。此外,如果您仅通过导入几个模块来运行 100 Megs,那么您可能在模块中做错了(似乎要使用相当多的内存)。

如果您绝对必须导入所有内容,不能减少内存使用并且不能使用线程,那么一种可能性是将大内存代码移动到用 C/C++ 编写的 python 扩展中。然后,这将允许您跨进程共享您的 python 扩展所在的共享库的公共段。它还可能在一定程度上减少内存占用。

PS在python中,您实际上是在导入模块,而不是类。类似于在 C/C++ 中包含头文件而不是类的方式。

于 2012-09-27T22:27:59.317 回答