MerginProject may not get cleaned up properly

Ouverte
#149 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
api

Piste de recherche

Commencez par localiser la création de GeoDiff de pygeodiff de MerginProject et la configuration du callback du logger, puis comparez le correctif de nettoyage dans mergin-db-sync PR 79 avec le geodiff issue 190 associé. Le travail est terminé lorsque la création répétée de MerginProject ne conserve plus les références cycliques et ne fait plus croître les ressources, en utilisant la boucle de reproduction pour vérifier le nettoyage.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug

When MerginProject is created, it creates geodiff object and assigns an internal logger to geodiff. This creates a cyclic reference (pygeodiff refs MerginProject, and MerginProject refs pygeodiff) that may keep resources held, which may be a problem if MerginProject object is created many times. See also fix for this in db-sync: https://github.com/MerginMaps/mergin-db-sync/pull/79

Also somehow related: https://github.com/MerginMaps/geodiff/issues/190

Code snippet to replicate the cleanup issue:

import pygeodiff

class MerginProjectX:

    def __init__(self, directory):

        def _logger_callback(level, text_bytes):
            self.x()   # not a real function, but refs this object...

        self.geodiff = pygeodiff.GeoDiff()
        self.geodiff.set_logger_callback(_logger_callback)

# this will keep consuming more and more resources
for i in range(50000):
    print(i)
    mp = MerginProjectX("x")
    #mp.geodiff = None    # this helps to break ref cycle
    time.sleep(0.005)
Langage dominant
Python
Étoiles
23
Forks
12
Merge moyen
2 j 13 h
PR mergées (30 j)
7

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de MerginMaps/python-api-client

Toutes les issues de MerginMaps/python-api-client

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.