Tha*_*tiK 10 python memory mechanize
我有一个网络抓取脚本,每分钟获取一次新数据,但在几天的时间里,脚本最终使用200mb或更多的内存,我发现它是因为mechanize保留了无限的浏览器历史记录. .back()函数使用.
我查看了文档字符串,并找到了浏览器类的clear_history()函数,每次刷新时都会调用它,但每次刷新页面时仍然会获得2-3mb更高的内存使用量. 编辑:嗯,好像它在我调用clear_history之后一直做同样的事情,直到我达到大约30mb的内存使用量,然后它清理回到10mb左右(这是我的程序启动的基本内存量)用...)任何方式更经常地强制这种行为?
如何保持机械化存储所有这些信息?我不需要保留它.我想保持我的python脚本低于15mb内存使用率.
Ale*_*lli 19
您可以history=whatever在实例化时传递参数Browser; 默认值是None指浏览器实际实例化History类(允许back和reload).最简单的方法(如果您回调或重新加载,将提供属性错误异常):
class NoHistory(object):
def add(self, *a, **k): pass
def clear(self): pass
b = mechanize.Browser(history=NoHistory())
Run Code Online (Sandbox Code Playgroud)
一个更简洁的方法将实施其他方法NoHistory来给出错误使用浏览器的更清晰的异常back或reload,但这个简单的一个原本应该足够了.
请注意,这是一个优雅的(尽管没有详细记录;-)使用依赖注入设计模式:在(bleah)"monkeypatching"世界中,客户端代码应该b._history在浏览器实例化后覆盖,但是依赖注入你只需传入你想要使用的"历史"对象.我经常坚持认为依赖注入可能是最不重要的DP,而不是"4人帮"这本书! - ).
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |