定期关闭并重新打开csv文件以减少内存负载
问题描述:
我正在编写一个脚本,用于使用硒对.csv文件进行中等大小的刮擦。约15,000行,每行10列。当我进行300日行的测试时,我注意到最后,它似乎比开始运行时慢一点。这可能只是我的看法,或者我可能已经与网速有关。但我有一个想法,直到我运行csv_file.close()
,文件不写入磁盘,我假设数据全部保存在内存缓冲区或什么?定期关闭并重新打开csv文件以减少内存负载
因此,定期关闭然后重新打开csv文件是有意义的(每个通过减少内存负载来帮助加速脚本的速度?还是有一些更大的问题,这会创建?或者是整个想法愚蠢,因为我想象脚本变慢了吗?300,000行的刮片产生了一个大约39kb的csv文件,这看起来并不多,但我不知道python在内存中保存这种数据是否会减慢它的速度或减慢速度
完整脚本的pastebin如果它有任何区别,请使用一些模糊处理:http://pastebin.com/T3VN1nHC *请注意脚本没有完全完成我正在努力使它对最终用户非常友好,所以在此时的运行时间有一些松散的末端仍然。
答
我经常使用Java和C#并且没有写入大型CSV文件的性能问题。写入CSV或SQL或其他任何可以忽略的内容,实际上是对页面/网站的抓取/导航。我建议你做一些额外的日志记录,这样你就可以看到刮页之间的时间和写CSV的时间,并重新运行你的300刮测试。
如果你真的想要更快,将输入文件分成两部分并触发脚本两次。现在你以两倍的速度跑...所以~9小时。这将是你最大的推动力。您可以多次触发它,并轻松在同一台机器上运行4+。我已经做了很多次(不需要网格)。
我唯一能想到的其他事情就是看看你的效率低下的方法,但运行至少两个并发脚本将会消除所有其他的改进/效率相结合。
为什么你不使用数据库?即使SQLite比CSV文件更好。 – jonrsharpe
这些信息最可能用于生成邮寄地址标签。我以前从未使用过SQL。会有什么真正的好处吗? csv看起来简单/容易,我认为它会转化为更快的运行时间。考虑到我不得不用硒来刮擦网站,我正在低头看18厘小时的垃圾桶。 – Lobsta
简单*实现*并不一定意味着*更快*。而且,如果你碰撞部分通过刮擦?下一步你对数据做什么并不重要。 – jonrsharpe