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>将写操作成批地分成500个组确实大大加快了写操作的速度。对于这个测试用例,写入行在I/O中分别花费了21.051秒,而成批写入117行则花费了5.685秒来写入相同数量的行。500批总共只花了0.266秒。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
5 回答
如何添加表示整数的擦边字符串?
4 回答
如何添加要在Bokeh中使用的新font.ttf文件?
8 回答
如何添加要显示的矩阵XY轴编号和XY轴
1 回答
如何添加计数?
4 回答
如何添加计数器函数?
10 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
3 回答
如何添加计数器来跟踪while循环中的月份和年份?
10 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
5 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
9 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
9 回答
如何添加评论拉梅尔亚姆
10 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
6 回答
如何添加谷歌地点自动完成到Flask?
4 回答
如何添加超时、python discord bot
3 回答
如何添加超过1dp的检查
2 回答
如何添加距离方法
5 回答
如何添加跟随游戏的敌人精灵
7 回答
如何添加路径以便python可以找到程序?
7 回答
如何添加身份验证/安全性以使用happybase访问HBase?
7 回答