在Python中划分磁盘?

我明白,在某些Windows XP程序中,如Photoshop,有一种叫做“暂存盘”的东西。 我的理解是,这意味着,如果我错了,请纠正我,Photoshop是在硬盘上pipe理自己的虚拟内存,而不是让Windowspipe理它。 我知道这个原因是由于Windows XP的限制,一个进程可以占用多less内存,而不pipeHD空间多less。 我认为它大约是3 GB。 我到目前为止是否正确?

我正在Python中运行一个应用程序来运行模拟。 这将需要大量的内存,并将在Windows XP上运行。 它有可能使用暂存盘吗? 怎么样?

直到你真的忘记了,想到这是浪费时间。

当你最终耗尽内存时,你需要使用一个临时文件来存储你的进程需要的对象,但是不能放入内存。

在文件中使用pickle或shelve(请参阅Data Persistence )对象。 如果该文件恰好位于名为“scratch”的磁盘上,那很好。

有时,出于性能方面的原因,您希望将临时文件与其他工作文件分开存放在不同的磁盘上。 在某些环境(SAN,NAS,存储阵列)中,您的磁盘是虚拟的,寻找“scratch”磁盘没有任何性能优势。 在其他环境下(即,您拥有所有硬件),您可以将临时文件放在其他驱动器上,使该驱动器成为“临时”磁盘。

我知道这个原因是由于Windows XP的限制,一个进程可以占用多少内存,而不管HD空间多少。 我认为它大约是3 GB。

只是一个FYI,这是一个32位操作系统的限制,而不是一个Windows XP的问题。 在32位的Vista,linux,bsd中你会遇到同样的问题…你明白了。 如果你走64位路线,你没有这些问题。

例如,Windows XP x64允许每个进程高达8 TB的内存 。

刮刮盘将有利于您的应用程序的情况下,它与非常大的文件,

是这样吗?

如果没有,那么我不认为你会发现什么,将有利于您的应用程序暂存磁盘。

内存映射文件可能是你正在寻找的。 Python的实现允许你在内存中使用一个像可变字符串的文件。

Win32 API提供了: 链接文本 。 您可能能够通过PyWin32使用这些功能。

你可以把S.Lott的答案和SqlLite结合起来使用(你应该使用cPickle来获得更好的性能)。

sqlite是建立在python2.5及以上版本的,所以你只需要import :),然后把pickle对象作为字符串存储在那里,你将有一个很好的访问数据的快速方法(与构建你的自己的方法),这将有助于保持你的组织。

注意:cPickle与使用中的泡菜几乎相同。 唯一不同的是它是用C写的

有用的Python文档:

  • sqlite3模块
  • 泡菜模块

编辑 :有一个用户控制的内存使用限制可能是一个好主意。 在用户拥有8GB内存时,将大量数据存储在磁盘上并等待慢速磁盘I / O将是一件耻辱;)

你可能正在寻找像ZODB这样的东西。 然而,虽然ZODB努力变得透明,但没有解决方案将100%免费的文物。 你必须编写你的代码,意识到你的对象主要存在于数据库中,但是你的对象有多个表示,有缓存/同步问题等等。没有什么会使这个非常困难的问题变得很微不足道。