定期关闭并重新打开csv文件以减少内存负载

问题描述:

我正在编写一个脚本,用于使用硒对.csv文件进行中等大小的刮擦。约15,000行,每行10列。当我进行300日行的测试时,我注意到最后,它似乎比开始运行时慢一点。这可能只是我的看法,或者我可能已经与网速有关。但我有一个想法,直到我运行csv_file.close(),文件不写入磁盘,我假设数据全部保存在内存缓冲区或什么?定期关闭并重新打开csv文件以减少内存负载

因此,定期关闭然后重新打开csv文件是有意义的(每个通过减少内存负载来帮助加速脚本的速度?还是有一些更大的问题,这会创建?或者是整个想法愚蠢,因为我想象脚本变慢了吗?300,000行的刮片产生了一个大约39kb的csv文件,这看起来并不多,但我不知道python在内存中保存这种数据是否会减慢它的速度或减慢速度

完整脚本的pastebin如果它有任何区别,请使用一些模糊处理:http://pastebin.com/T3VN1nHC *请注意脚本没有完全完成我正在努力使它对最终用户非常友好,所以在此时的运行时间有一些松散的末端仍然。

+4

为什么你不使用数据库?即使SQLite比CSV文件更好。 – jonrsharpe

+0

这些信息最可能用于生成邮寄地址标签。我以前从未使用过SQL。会有什么真正的好处吗? csv看起来简单/容易,我认为它会转化为更快的运行时间。考虑到我不得不用硒来刮擦网站,我正在低头看18厘小时的垃圾桶。 – Lobsta

+0

简单*实现*并不一定意味着*更快*。而且,如果你碰撞部分通过刮擦?下一步你对数据做什么并不重要。 – jonrsharpe

我经常使用Java和C#并且没有写入大型CSV文件的性能问题。写入CSV或SQL或其他任何可以忽略的内容,实际上是对页面/网站的抓取/导航。我建议你做一些额外的日志记录,这样你就可以看到刮页之间的时间和写CSV的时间,并重新运行你的300刮测试。

如果你真的想要更快,将输入文件分成两部分并触发脚本两次。现在你以两倍的速度跑...所以~9小时。这将是你最大的推动力。您可以多次触发它,并轻松在同一台机器上运行4+。我已经做了很多次(不需要网格)。

我唯一能想到的其他事情就是看看你的效率低​​下的方法,但运行至少两个并发脚本将会消除所有其他的改进/效率相结合。

+0

不知道您是否过于熟悉硒,但会导致用于2个并发脚本的chromedriver.exe文件出现问题吗? – Lobsta

+0

没有。我正在谈论使用硒。我一直都这样使用它。你只需要为每个脚本分割你的输入文件,或者设置一些逻辑并使用SQL等等。 – JeffC

+0

非常好,谢谢你的这个建议,我真的不会想到这一点。森林为树有点情况。我正在搜索的搜索表单没有“跳转到...页面”链接,只有下一个/上一个,因此我必须在'while current_page Lobsta