IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

seria.Serial et garbage collector


Sujet :

Python

  1. #1
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut seria.Serial et garbage collector
    Salut

    J'ai crée une classe qui hérite de serial.Serial. Quelquepart dans une fonction quelconque, j'instancie et, dans cette fonction, j'ouvre et j'utilise le port COM hérité de Serial. Je m'attendais à ce que au moment où je quitte la fonction, le garbage collector me ferme le port et détruise l'instance. Or le port reste ouvert, m'interdisant ainsi d'instancier ailleurs mon port COM. Ca ne me parait normal, vu que pour un fichier créé dans une fonction, la sortie de la fonction provoquie la fermeture du fichier. Quelqu'un sait comment faire pour fermer et détruire le port COM automatiquement quand on quitte la fonction où il a été créé?

    A+

    Pfeuh

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    Bonjour,

    je ne sais pas si on peut le faire automatiquement.

    Par contre il me parait possible de faire :

    lorsque tu n'as plus besoin du port COM.

    En espèrant répondre à ta question

    Ciao

  3. #3
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Merci. C'est justement ce que voudrais éviter pour profiter du côté automatique du garbage collector. Je suis en train de lire la doc, je pense pouvoir trouver la méthode appelée par le garbage collector, ce n'est pas __destroy__ mais je pense pouvoir la trouver et la réécrire pour appeler Serial.close().

    <edit1>
    __destroy__
    destroy
    __del__
    __quit__
    quit

    Aucune de ces fonctions n'est appelée, ni à la sortie de la fonction, ni à la sortie du programme! Je sèche...
    </edit1>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    J'avoue avoir eu le même problème et m'être résolu à fermer le port à la main.

    Si tu trouve une solution à ce problème je suis intéressé de savoir comment faire.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Une alternative est d'utiliser un with. Je suppose que la classe Serial n'implémente pas de context manager mais s'il y a une méthode close on peut utiliser la fonction closing de contextlib:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from contextlib import closing
     
    with closing(MySerial(...)) as s:  # remplace s = MySerial(...)
        # utilise s
    # la méthode close est appelée automatiquement à la fin du bloc with, même si une exception a été levée

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 27
    Par défaut
    Merci Dividee pour le conseil du bloc with

    J'essairai ta solution quand j'aurai un peu de temps

    Et en Python 2.4 ?

  7. #7
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Une alternative est d'utiliser un with.
    Merci dividee, comme Madmaxx18 je m'étais résolu à utiliser systématiquement le close... J'essaierai dès lundi matin!

    [EDIT]
    On est lundi matin... Ca marche nickel!
    [/EDIT]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JVM] Java 5 et Garbage Collector(Parralèle)
    Par ssaunois dans le forum Général Java
    Réponses: 6
    Dernier message: 28/11/2005, 23h42
  2. [JVM]Garbage collector
    Par godik dans le forum Général Java
    Réponses: 5
    Dernier message: 07/10/2005, 09h12
  3. JPanel et Garbage Collector
    Par tck-lt dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 25/07/2005, 18h03
  4. [JVM] les objets et le Garbage collector
    Par Kurdran dans le forum Général Java
    Réponses: 7
    Dernier message: 02/06/2005, 16h57
  5. [Language]Garbage collector
    Par GETah dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo