Quand Mechanize bouffe toute votre RAM et que vous ne savez pas pourquoi…. | Sam & Max: Python, Django, Git et du cul

Quand Mechanize bouffe toute votre RAM et que vous ne savez pas pourquoi….

En revenant de Bangla Road l’autre soir, je me connecte sur l’admin d’un de nos serveurs et je m’aperçois qu’un script de grabbing bouffait à lui tout seul plus de 30% de la mémoire. Après quelques recherches Sam me fait part d’un article sur Mechanize et sa tendance à avoir un history plutôt vorace en RAM.

Le coupable était Mechanize avec le chandelier dans le salon:

En effet Mechanize par défaut sauve tout l’historique de votre navigation, donc imaginez le carnage quand vous avez un script qui est censé scanner des milliers de pages internet…

Pour lui couper le sifflet on peut utiliser cette méthode:


import mechanize
from mechanize import History

class MaxHistory(History):
    """
        History implementation with a size limit.
    """
    def __init__(self, max_history=None):
        self._history = []  # LIFO
        self.max_history = max_history

    def add(self, request, response):
        self._history.append((request, response))

        if (self.max_history is not None and self._history
            and self.max_history <= len(self._history)):
            self._history.pop(0)

br = mechanize.Browser(history=MaxHistory(max_history=10))
Browser.open("http://sametmax.com/")

Et voilà!
Plus de problème de mémoire. Merci bibi.

  1 comment for “Quand Mechanize bouffe toute votre RAM et que vous ne savez pas pourquoi….

  1. john
    17/07/2013 at 15:56

    merci !

Leave a Reply

Your email address will not be published. Required fields are marked *