Python中文
首页
教程
问答
标签
搜索
登录
注册
加快写入文件的速度
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我已经分析了一些用cProfile继承的遗留代码。我已经做了一些有帮助的修改(比如使用simplejson的C扩展!)。</p> <p>基本上,这个脚本是将数据从一个系统导出到一个ASCII固定宽度文件。每一行是一条记录,它有许多值。每行7158个字符,包含大量空格。记录总数为150万条。每行一次生成一行,需要一段时间(每秒5-10行)。</p> <p>生成每一行时,它会尽可能简单地写入磁盘。分析表明,总时间的约19-20%用于<code>file.write()</code></strong>。一个1500行的测试用例需要20秒。我想减少这个数字。</p> <p>现在看来,下一个胜利将是减少写入磁盘的时间。如果可能的话,我想减少。我可以在内存中保存一个记录缓存,但我不能等到结束时立即将其全部转储。</p> <pre><code>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() </code></pre> <p>我的第一个想法是在一个列表中保存一个记录缓存,并成批地写出来。会更快吗?类似于:</p> <pre><code>rows = [] for c, (recordid, values) in enumerate(generatevalues()): rows.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(prep_row(recordid, values)) if c % 117 == 0: fd.write('\n'.join(rows)) rows = [] </code></pre> <p>我的第二个想法是用另一根线,但那让我想死在里面。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>实际上,你的问题并不是<code>file.write()</code>占用你20%的时间。你80%的时间不在这里!</p> <p>写入磁盘的速度很慢。你真的无能为力。把东西写到磁盘上只需要很长时间。你几乎没办法加快速度。</p> <p>你想要的是让I/O时间成为程序的最大部分,这样你的速度就被硬盘的速度而不是你的处理时间所限制。理想情况是<code>file.write()</code>100%使用!</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
1 回答
如何添加表示整数的擦边字符串?
9 回答
如何添加要在Bokeh中使用的新font.ttf文件?
3 回答
如何添加要显示的矩阵XY轴编号和XY轴
2 回答
如何添加计数?
5 回答
如何添加计数器函数?
9 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
9 回答
如何添加计数器来跟踪while循环中的月份和年份?
6 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
9 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
8 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
9 回答
如何添加评论拉梅尔亚姆
4 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
7 回答
如何添加谷歌地点自动完成到Flask?
7 回答
如何添加超时、python discord bot
4 回答
如何添加超过1dp的检查
4 回答
如何添加距离方法
3 回答
如何添加跟随游戏的敌人精灵
6 回答
如何添加路径以便python可以找到程序?
10 回答
如何添加身份验证/安全性以使用happybase访问HBase?
6 回答