Forum Programmation.python Sauvegarder environement d'execution Python

Posté par  .
Étiquettes : aucune
0
16
mar.
2009
Bonjour à tous.

Bon la question du titre est assez vague mais je vais essayer de préciser un peu.

Le contexte est le suivant : j'ai un programme qui s'exécute, il commence par charger pleins de données depuis une base de donnée, fait des traitements relativement lourds et encore d'autres trucs.

Bref d'initialisation est assez longue, et relativement stabilisée, par contre la seconde partie du code est en développement et pour débugger je dois, à chaque exécution, passer par la phase d'initialisation qui est longue, ce qui ralentit considérablement le développement.

Je voudrais donc pouvoir mettre une sorte de breakpoint dans mon code qui sauvegarde toutes les variables et tous les objet à cet instant sur le disque dans un fichier dans le but de reprendre l'exécution à cet endroit mais après avoir modifier les sources.

si vous avez compris ce que je veux faire et que vous connaissez un solution je suis tout ouïe.

Merci d'avance.
  • # Pas facile

    Posté par  . Évalué à 2.

    Ce n'est pas si facile que ça de "sauvegarder l'environnement" d'un processus : si encore ce n'était que le problème de python ... Il faut aussi penser aux descripteurs de fichiers ouverts, aux sockets, etc. qu'il faudrait rouvrir si tu voulais repartir d'un état sauvegardé quelque part ...

    Bref, il n'y a pas, je pense, de solution pas trop compliquée dans cette voie là.

    Après, je pense que tu devrais plutôt d'abord essayer de réduire l'ensemble de données sur lesquelles tu bosses lors de la phase de développement : minimiser les données extraites de la base, trouver un mimimum pour tester. Une fois que t'as bien testé avec cet environnement réduit, tu peux retester de temps en temps avec l'environnement complet.
    • [^] # Re: Pas facile

      Posté par  . Évalué à 1.

      C'est ce que je fais dans un premier temps pour tester si il n'y pas d'erreur grossière mais pour tester réellement les algos j'ai besoin de l'ensemble des données (ou au moins 30% mais ça prends déjà trop de temps).
  • # Utiliser le prompt ?

    Posté par  (site web personnel) . Évalué à 1.

    L'équivallent de save-lisp [1] n'existe pas en python ?

    Peut-être peux tu découper ton programme en deux. Une partie qui fait l'initialisation que tu charge en premier.
    Puis la partie que tu débogues dans un autre fichier que tu recharges depuis le prompt.
    Une session donnerai un truc du genre :

    $ python -i longue_initialisation.py
    >>> execfile("la_partie_test.py")
    ...
    >>> execfile("la_partie_test.py")
    ...

    Sinon, il y a sûrement un moyen plus direct de faire quelque chose comme Slime [2] depuis un éditeur.

    [1] http://common-lisp.net/project/cmucl/doc/cmu-user/extensions(...)
    [2] http://common-lisp.net/project/slime/
    • [^] # Re: Utiliser le prompt ?

      Posté par  . Évalué à 1.

      C'est presque l'idée, sauf que je voudrais pouvoir changer l'endroit où j'interromps le code assez facilement. Si je ne trouve pas mieux je vais partir sur cette idée.
  • # Pickle

    Posté par  . Évalué à 2.

    Le module Pickle permet de sauvegarder (sérialiser) le contenu d'un objet dans un fichier afin de pouvoir le recharger plus tard:

    pickle.dump(obj, file)
    puis
    pickle.load(file)

    Si tu veux sauvegarder plusieurs objet d'un coup, le plus simple est de les stocker dans une table et de sérialiser la table.

    Par contre il ne permet pas de sauvegarder n'importe quel type de données, en particulier je ne pense pas que les connexions vers des bases de données ou des fichiers ouverts puisse être restitués à l'identique.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.