Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python';s mmap()性能随时间下降_Python_Performance_Memory_Mmap - Fatal编程技术网

Python';s mmap()性能随时间下降

Python';s mmap()性能随时间下降,python,performance,memory,mmap,Python,Performance,Memory,Mmap,我想知道为什么Python的mmap()性能会随着时间的推移而下降?我的意思是,我有一个小应用程序,可以对N个文件进行更改,如果设置很大(不是太大,比如说1000),那么前200个是恶魔的速度,但在那之后它会越来越慢。看起来我应该偶尔释放一次内存,但我不知道Python如何以及最重要的是为什么不自动释放内存 有什么帮助吗 --编辑-- 是这样的: def function(filename, N): fd = open(filename, 'rb+') size = os.path.

我想知道为什么Python的mmap()性能会随着时间的推移而下降?我的意思是,我有一个小应用程序,可以对N个文件进行更改,如果设置很大(不是太大,比如说1000),那么前200个是恶魔的速度,但在那之后它会越来越慢。看起来我应该偶尔释放一次内存,但我不知道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()

您的操作系统将mmap页面缓存在RAM中。从缓存中以RAM速度进行读取和写入。脏页最终会被刷新。在Linux上,性能将非常好,直到您必须开始刷新页面,这是由vm.dirty\u ratio sysctl变量控制的。一旦开始将脏页刷新到磁盘,读操作将与繁忙IO总线/设备上的写操作竞争。另一个需要考虑的问题是,您的操作系统是否有足够的RAM来缓存所有文件(缓冲输出在顶部输出中)。因此,我会在程序运行时观察“vmstat 1”的输出,并观察缓存/buff计数器上升,直到您突然开始执行IO。

我们可以看到一些代码吗?这可能说明了GC不起作用的原因。添加了代码,实际上几乎就是一切,在循环中,如果该语句为真,我会对文件进行3次操作。您是否真的观看了
top
或任务管理器或您平台的其他内容?Python正在占用越来越多的内存吗?CPU是固定的吗?或者只是你的硬盘缓存被填满了?当它运行缓慢时,你看过操作系统的统计数据了吗?不知道你是否在交换。这表明存在gc问题。映射到
null
的设置是否改善或修复了您的问题?