我们有一个基于 Python 的 Web 服务器,它在启动时使用cPickle
. 数据文件(使用 腌制HIGHEST_PROTOCOL
)在磁盘上大约为 0.4 GB,并作为大约 1.2 GB 的 Python 对象加载到内存中——这大约需要20 秒。我们在 64 位 Windows 机器上使用 Python 2.6。
瓶颈当然不是磁盘(实际读取这么多数据需要不到 0.5 秒的时间),而是内存分配和对象创建(创建了数百万个对象)。我们希望减少 20 秒以减少启动时间。
有什么方法可以将超过 1GB 的对象反序列化成 Python 比cPickle
(比如 5-10 倍)快得多?因为执行时间受内存分配和对象创建的限制,所以我认为使用另一种 unpickling 技术(例如 JSON)在这里没有帮助。
我知道一些解释语言有办法将它们的整个内存映像保存为磁盘文件,因此他们可以一次将其加载回内存,而无需为每个对象分配/创建。有没有办法在 Python 中做到这一点,或者实现类似的东西?