python mysql写入速度加快_加快写入文件的速度

我已经分析了一些用cProfile继承的遗留代码。我已经做了一些有帮助的修改(比如使用simplejson的C扩展!)。

基本上,这个脚本是将数据从一个系统导出到一个ASCII固定宽度文件。每一行是一条记录,它有许多值。每行7158个字符,包含大量空格。记录总数为150万条。每行一次生成一行,需要一段时间(每秒5-10行)。

生成每一行时,它会尽可能简单地写入磁盘。分析表明,总时间的约19-20%用于file.write()。一个1500行的测试用例需要20秒。我想减少这个数字。

现在看来,下一个胜利将是减少写入磁盘的时间。如果可能的话,我想减少。我可以在内存中保存一个记录缓存,但我不能等到结束时立即将其全部转储。fd = open(data_file, 'w')

for c, (recordid, values) in enumerate(generatevalues()):

row = prep_row(recordid, values)

fd.write(row)

if c % 117 == 0:

if limit > 0 and c >= limit:

break

sys.stdout.write('\r%s @ %s' % (str(c + 1).rjust(7), datetime.now()))

sys.stdout.flush()

我的第一个想法是在一个列表中保存一个记录缓存,并成批地写出来。会更快吗?类似于:rows = []

for c, (recordid, values) in enumerate(generatevalues()):

rows.append(prep_row(recordid, values))

if c % 117 == 0:

fd.write('\n'.join(rows))

rows = []

我的第二个想法是用另一根线,但那让我想死在里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值