如果数字比较太慢

时间:2016-10-07 10:20:48

标签: python

我有一个缓冲区,我需要确保我不超过一定的大小。如果我这样做,我想将缓冲区附加到文件并清空它。

我的代码:

var r = new RegionInfo(yourCultureInfo.LCID);
var flagName = r.TwoLetterISORegionName + ".gif";

然而,这种比较(import sys MAX_BUFFER_SIZE = 4 * (1024 ** 3) class MyBuffer(object): b = "" def append(self, s): if sys.getsizeof(self.b) > MAX_BUFFER_SIZE: #...print to file... empty buffer self.b = "" else: self.b += s buffer = MyBuffer() for s in some_text: buffer.append(s) )太慢了(即没有比较,整个执行时间不到1秒,比较需要5分钟)。

目前我可以将整个sys.getsizeof(self.buffer) > MAX_BUFFER_SIZE放到内存中,因此缓冲区实际上永远不会超过some_string,但我必须确保我的代码也适用于大文件(大小为几TB)

编辑:

此代码运行时间不到1秒:

MAX_BUFFER_SIZE

问题是缓冲区可能会变得太大。

同样,此代码也在1秒内运行:

import sys

buffer = ""
for s in some_text:
    buffer += s

#print out to file

编辑2:

抱歉,缓慢的部分实际上是附加到缓冲区,而不是我想的比较本身...当我测试代码时,我注释掉了整个import sys MAX_BUFFER_SIZE = 4 * (1024 ** 3) class MyBuffer(object): b = "" def append(self, s): print sys.getsizeof(self.b) buffer = MyBuffer() for s in some_text: buffer.append(s) 语句而不仅仅是第一部分。

因此,有没有一种有效的方法来保持缓冲区?

1 个答案:

答案 0 :(得分:1)

根据对问题的修改取消删除并编辑我的答案。

假设比较缓慢是不正确的。事实上,比较很快。真的,真的很快。

为什么不通过使用缓冲IO来避免重新发明轮子?

  

可选的缓冲参数指定文件所需的缓冲区大小:0表示无缓冲,1表示行缓冲,任何其他正值表示使用(大约)该大小(以字节为单位)的缓冲区。负缓冲意味着使用系统默认值,通常为tty设备进行行缓冲,并为其他文件进行完全缓冲。如果省略,则使用系统默认值。 [2]

https://docs.python.org/2/library/functions.html#open