我想知道为什么Python的mmap()性能会随着时间而下降?我的意思是我有一个小应用程序,它可以改变N个文件,如果set是big(不是太大,比如1000)前200个是恶魔的速度,但之后它会变得越来越慢。看起来我应该偶尔释放一次内存,但不知道Python是如何以及最重要的为什么Python不自动执行此操作。在
有什么帮助吗?在
--编辑--
大概是这样的:
def function(filename, N):
fd = open(filename, 'rb+')
size = os.path.getsize(filename)
mapped = mmap(fd.fileno(), size)
for i in range(N):
some_operations_on_mmaped_block()
mapped.close()
你的操作系统在RAM中缓存mmap的页面。从缓存读取和写入以RAM速度进行。脏页最终会被刷新。在Linux上,性能将非常好,直到必须开始刷新页面,这是由vm.脏系数sysctl变量。一旦开始将脏页刷新到磁盘上,读操作将与繁忙的IO总线/设备上的写操作竞争。另一件要考虑的事情就是你的操作系统是否有足够的内存来缓存所有的文件(最上面输出的缓冲区计数器)。所以我会在程序运行时观察“vmstat 1”的输出,并观察缓存/缓冲计数器上升,直到突然开始执行IO。在
相关问题 更多 >
编程相关推荐