我对Python很陌生,但我有一个很痛苦的问题。 我收到一个程序,它读取一个内嵌(文本),更改一些值,并写入一个输出文件(也包括文本)。 随着输出文件越来越大,写入速度越来越慢,在大约2MB之后,它的速度慢得令人无法忍受。 为什么会这样?我尝试过改变代码以使用不同大小的缓冲区,并且在编写之前将数据缓存到更大的块(字符串)中。我还尝试用join而不是+=来创建要写入的字符串。这些对性能没有任何影响,除了写更大的块,这实际上使代码变慢。(!!!)在
下面是编写输出文件的方法。我将write部分从一个单独的方法移到inline:
for ifile in _file_stripper(f_in):
parse_infile(ifile)
date = variable_data['arkiveringsdatum']
variable_data['arkiveringsdatum'] = datetime( int(date[0:4]), int(date[4:6]), int(date[6:8]), tzinfo=TZ()).isoformat('T')
_personnr= variable_data['personnr'].replace('-', '').split(' ')[0]
tmplist = ['<utskriftsstatus><brevid_kalla>', variable_data['brevid_kalla'], '</brevid_kalla><mapp>Se Allt</mapp><tidpunkt>', variable_data['arkiveringsdatum'], '</tidpunkt><dokumentpaket>', variable_data['dokumenttyp'], '</dokumentpaket><status>Utskriven</status><rensningsdatum>999999</rensningsdatum><kundid_gdb>', variable_data['kundid_gdb'], '</kundid_gdb><personnr>', _personnr, '</personnr></utskriftsstatus>']
f_out.write(''.join(tmplist))
方法_file_stripper
将大文件拆分为记录。
填充为5-21 MB。在
请建议在哪里查找错误。 当我谈到减速时,在大约1MB被写入后,写入速度会下降到4KB/秒以下,并且随着输出文件的增大,写入速度会不断下降。在
编辑:根据要求,这里是parse_infile和\u file_stripper:
^{pr2}$
最有可能的情况是,
variable_data
,或者更可能是其中的某些字段,随着每个解析的文件而增长。在您的
parse_infile
函数可能没有重置它,并将新文件的值附加到已存在的值上,使其在每次读取文件时变大-这将导致(O²)中使用资源,如您所述。在最好的做法是不要依赖全局变量—让您的
parse_infile
函数为每个交互创建一个新的字典,并将其返回给调用方。在主函数上,将函数的返回值指定给字典:您的
_file_stripper
函数将无休止地添加到myfile
列表中,而不必重置列表:请注意,
myfile
是在循环之外设置的,每一行都以myfile
为前缀,然后按原样生成。因此,进程内存占用将不断增长,迫使操作系统最终开始交换内存,从而使进程缓慢爬行。在我想你是想重置
^{pr2}$myfile
,而GROUP_FILENAME
没有出现在rows
中:相关问题 更多 >
编程相关推荐