gpt4 book ai didi

python - 如何在 python mechanize 模块中禁用历史记录?

转载 作者:IT王子 更新时间:2023-10-28 23:33:08 26 4
gpt4 key购买 nike

我有一个网络抓取脚本,每分钟获取一次新数据,但在几天的过程中,该脚本最终使用了 200mb 或更多内存,我发现这是因为 mechanize 保持无限浏览器.back() 函数使用的历史记录。

我查看了文档字符串,发现了浏览器类的 clear_history() 函数,每次刷新时我都会调用它,但每次页面刷新时我仍然会增加 2-3mb 的内存使用量。 edit:嗯,在我调用 clear_history 之后,它似乎一直在做同样的事情,直到我使用了大约 30mb 的内存使用量,然后它又清理回了 10mb 左右(这是我的程序启动时使用的基本内存量)...有什么方法可以更定期地强制这种行为?

如何防止 mechanize 存储所有这些信息?我不需要保留任何东西。我想将我的 python 脚本的内存使用量保持在 15mb 以下。

最佳答案

您可以在实例化 Browser 时传递参数 history=whatever;默认值为 None,这意味着浏览器实际上实例化了 History 类(以允许 backreload)。最简单的方法(如果您确实回调或重新加载,将给出属性错误异常):

class NoHistory(object):
def add(self, *a, **k): pass
def clear(self): pass

b = mechanize.Browser(history=NoHistory())

一种更简洁的方法是在 NoHistory 中实现其他方法,以便在错误使用浏览器的 backreload 时给出更清晰的异常,但这很简单否则一个就足够了。

请注意,这是对依赖注入(inject)设计模式的一种优雅(尽管没有很好的记录;-)使用:在(无聊的)“猴子补丁”世界中,客户端代码将被期望覆盖 b._history 在浏览器被实例化之后,但是通过依赖注入(inject),您只需传入您想要使用的“历史”对象。我经常坚持认为,依赖注入(inject)可能是最重要的 DP,它不在“4 人帮”一书中!-)。

关于python - 如何在 python mechanize 模块中禁用历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com