如何加速生成任意大小字符串的IronPython代码

2024-04-27 02:51:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个在C应用程序中运行的python脚本(我无法控制它的源代码),我希望这个脚本生成一个任意大小的文件。这个文件中的数据无关紧要。我编写了以下代码:

def generateFile(filename, size):
    file = open(filename, 'wb')
    file.write(''.join('0' for _ in range(size)))
    file.close()

IronPython在这个C应用程序中的集成总体上非常缓慢,但基本上是可以接受的。但是这段代码太慢了。生成一个1KB的文件大约需要20秒,而我需要生成大约1M或更多的文件。你知道吗

经过一些调查,似乎慢主要来自生成用于写入文件的字符串。你知道吗

有没有另一种方法可以在更快、可接受的时间内完成同样的任务?你知道吗


Tags: 文件数据代码脚本应用程序size源代码def
2条回答

我不明白怎么会这么慢

不管怎样,这可能会有所帮助;我不是一次生成一个兆字节的字符串,而是生成32K并根据需要多次重用它。您可以使用块大小来查看什么最有效。你知道吗

在我的机器上,它在0.81秒内写入一个100MB的文件。你知道吗

CHUNK_SIZE = 32768       # 32k (arbitrary choice)

def generateFile(filename, bytes):
    n, r = divmod(bytes, CHUNK_SIZE)
    chunk = "0" * CHUNK_SIZE
    with open(filename, 'w') as outf:
        for _ in range(n):
            outf.write(chunk)
        outf.write(chunk[:r])

你可以用

file.write('0'.zfill(size))

相关问题 更多 >