Как я отключаю историю в Python, механизируют модуль?

У меня есть веб-сценарий очистки, который получает новые данные один раз в минуту, но в течение нескольких дней, сценарий заканчивает тем, что использовал 200 МБ или больше памяти, и я узнал, что это - потому что механизируют, сохраняет бесконечную историю браузера для .back () функцией для использования.

Я посмотрел в docstrings, и я нашел clear_history () функцией класса браузера, и я вызываю тот каждый раз, когда я обновляюсь, но я все еще получаю 2-3mb более высокое использование памяти на каждом обновлении страницы.править: Хм, кажется, как будто это продолжало делать то же самое после того, как я назвал clear_history, вплоть до я добрался до ценности приблизительно 30 МБ использования памяти, тогда это очистилось, отступают приблизительно к 10 МБ (который является основным объемом памяти, который моя программа запускает с)... какой-либо способ вызвать это поведение на более регулярной основе?

Как делают я сохраняю, механизируют от хранения всей этой информации? Я не должен сохранять ни один из него. Я хотел бы сохранить свой сценарий Python ниже использования памяти 15 МБ.

10
задан ThantiK 6 March 2010 в 17:08
поделиться

1 ответ

Вы можете передать аргумент 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, которого не было в книге «Банда из четырех»! -).

19
ответ дан 3 December 2019 в 20:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: