У меня есть веб-сценарий очистки, который получает новые данные один раз в минуту, но в течение нескольких дней, сценарий заканчивает тем, что использовал 200 МБ или больше памяти, и я узнал, что это - потому что механизируют, сохраняет бесконечную историю браузера для .back () функцией для использования.
Я посмотрел в docstrings, и я нашел clear_history () функцией класса браузера, и я вызываю тот каждый раз, когда я обновляюсь, но я все еще получаю 2-3mb более высокое использование памяти на каждом обновлении страницы.править: Хм, кажется, как будто это продолжало делать то же самое после того, как я назвал clear_history, вплоть до я добрался до ценности приблизительно 30 МБ использования памяти, тогда это очистилось, отступают приблизительно к 10 МБ (который является основным объемом памяти, который моя программа запускает с)... какой-либо способ вызвать это поведение на более регулярной основе?
Как делают я сохраняю, механизируют от хранения всей этой информации? Я не должен сохранять ни один из него. Я хотел бы сохранить свой сценарий Python ниже использования памяти 15 МБ.
Вы можете передать аргумент history = something
при создании экземпляра браузера
; значение по умолчанию - Нет
, что означает, что браузер фактически создает экземпляр класса History
(чтобы разрешить вернуть
и перезагрузить
)). Самый простой подход (выдаст исключение ошибки атрибута, если вы когда-либо перезвоните или перезагрузите):
class NoHistory(object):
def add(self, *a, **k): pass
def clear(self): pass
b = mechanize.Browser(history=NoHistory())
более чистый подход будет реализовывать другие методы в NoHistory
, чтобы дать более четкие исключения при ошибочном использовании браузера ] назад
или перезагрузить
, но этого простого должно хватить в противном случае.
Обратите внимание, что это элегантное (хотя и не очень хорошо документированное ;-) использование шаблона проектирования внедрения зависимостей: в (бах) мире «обезьяньего исправления» ожидается, что клиентский код перезапишет b._history
после создания экземпляра браузера, но при внедрении зависимостей вы просто передаете объект «истории», который хотите использовать. Я часто утверждал, что внедрение зависимостей может быть самым важным DP, которого не было в книге «Банда из четырех»! -).