跨python进程共享模块

2024-10-03 00:21:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在写一个内存紧张的系统。有多个python进程将导入同一组类。如果进程加载了大量的类,而每个进程消耗几百兆字节,那么10个进程和我一起运行到gig中。有没有一种方法可以跨python进程“共享”类导入?在

小结:

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

PS:我试图实现的是在C/C++中使用{{CD1>}模块的方法。在


Tags: 方法内存inimport字节进程系统process
2条回答

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

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

我不相信这在python的设计中是不可能的。如果这是一个大问题,您可能希望使用线程而不是单独的进程。另外,如果你仅仅通过导入几个模块就运行了100meg,那么你可能在模块中做了一些错误的事情(似乎要使用相当多的内存)。在

一种可能性,如果你必须完全导入所有的东西,不能减少内存使用量,不能使用线程,则是将大内存代码移动到用C/C++编写的Python扩展。那么在python库中共享的进程将允许您共享这个库中的公共扩展。它还可以在一定程度上减少内存占用。在

在python中,你实际上是在导入模块,而不是类。类似于C/C++中的头文件,而不是类。在

相关问题 更多 >