跨python进程共享模块

时间:2012-09-27 22:23:58

标签: python shared-libraries

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

要点:

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

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

2 个答案:

答案 0 :(得分:2)

如果您的操作系统支持高效的写时复制分支(很多都可以),则可以节省至少一些内存。只需import父母一次,然后fork()创建所有孩子。

请注意,如果您有许多小对象,则不会保存任何内容,因为需要写入对象的refcounts。但是,您可以看到大型静态结构(如属性词典)可以节省大量资金。

答案 1 :(得分:1)

我不相信这在python的设计中是可能的。如果这是一个大问题,您可能希望使用线程而不是单独的进程。另外,如果你只是通过导入几个模块来运行100 Megs,那么你可能在模块中做错了(看起来有点内存可供使用)。

如果你绝对必须导入所有内容,不能减少内存使用而不能使用线程,那么将大内存代码移动到用C / C ++编写的python扩展中。这将允许您跨越进程共享python扩展所在的共享库的公共段。它也可能会减少内存占用。

P.S。在python中,你实际上是导入模块,而不是类。与C / C ++中的类似,你包括头文件,而不是类。

相关问题