2017-08-15 1 views
0

J'ai un simple script 2 étapes l'analyse syntaxique écrit en Python 3 travail comme celui-ci:Comment nettoyer la mémoire lors de l'analyse en python

1) La fonction donnée une URL avec parse BeautifullSoup, rassemble toutes les données nécessaires J'ai une énorme liste d'URL (plus de 50K éléments) que je travaille dans une boucle

def parse(url): 
    ...fill in Series 
    return Series 

2):: dans un langage simple série Pandas retourne alors il

for url in urls: 
    dataframe.append(parse(url)) 

Lorsque le script est exécuté mémoire usa ge augmente beaucoup (comme 5 Go après seulement 20 minutes). Comment nettoyer correctement la mémoire ou le cache téléchargé après chaque itération?

+1

Essayez de tout traiter paresseusement. Il est difficile de dire beaucoup plus mais sans plus de contexte. – Carcigenicate

+0

Désolé, que voulez-vous dire en disant "traiter tout paresseusement"? –

+0

En utilisant des générateurs de sorte que vous ne gardez pas tout en mémoire en même temps. Avoir les résultats produits par un générateur au lieu de tout jeter dans une liste à la fois. – Carcigenicate

Répondre

0

Ok les gars si vous luttez le même problème:

1) Assurez-vous que vous utilisez soup.decompose() après fait avec elle 2) Bien sûr, je fait une erreur quand j'ai essayé de remplir toutes les données un pd.DataFrame avant de l'enregistrer dans le fichier. Maintenant, je reçois un petit dataframe tmp, une fois que je contourne un nombre fixe de lignes, je l'enregistre puis efface tmp.

Maintenant, le processus utilise environ 200 mb de RAM maximum.

Voilà, j'espère que cela aidera n'importe qui.