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 :

Libérer la mémoire en multi-thread


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 49
    Points : 36
    Points
    36
    Par défaut Libérer la mémoire en multi-thread
    Salut,
    J'ai créé un service multi-thread qui attend une connexion reseau sur un port donné et qui crée un thread a chaque fois qu'un client se connecte.
    Chaque thread ainssi créé s'occupe donc de son client.
    Lorsque le dialogue est fini, la fonction run() du thread se termine et le thread en fait autant.
    Le probleme c'est que j'ai remarqué que le processus bouffe de plus en plus de mémoire. J'en déduit que les thread ne désallouent pas complètement la mémoire utilisée.
    Dans mes thread, il y a une fonction __init__() qui initialise des variables mais je ne connait pas la fonction qui permet de désallouer ces variables.
    J'ai essayé avec la fonction __del__() mais ca ne marche pas!
    Comment forcer le thread a libérer toute sa mémoire?
    Merci.

  2. #2
    Membre actif
    Avatar de Wormus
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 276
    Points
    276
    Par défaut
    Comme j'ai répondu à 2 autres personnes (lol c'est ma soirée), essaye la méthode qui permet de stopper le thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    leThread._Thread__stop()
    Maintenant je ne suis pas sûr quelle libère bien la mémoire ! essaye toujours et si c'est pas le cas, moi aussi je suis interressé pour savoir comment faire
    Bankaï !!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 49
    Points : 36
    Points
    36
    Par défaut
    Merci de ta reponse,
    je pense que c'est une bonne piste.
    En fait mon application est un service.
    Donc mon thread principal crée un deuxieme thread qui va attendre les connexion des clients ensuite il s'occupe de recupere les evenements windows pour savoir si on lui demande de s'arreter par exemple.
    Le deuxieme thread se connecte a une base de donnée et attend la connexion d'un client sur une socket.
    Lorsqu'un client se connecte, le deuxieme thread crée alors un autre thread en lui passant la connexion a la base de données. Ce thread va donc s'occuper de son client et enregistrer les données recus dans la base de données.
    Jusque la tout vas bien.
    Lorsque on donne l'odre au service de s'arreter, il le détecte bien et une fonction s'execute.
    Dans cette fonction, je parcours les thread enfants grace a la fonction enumerate().
    Si le thread appartient a la classe ThreadClient (qui s'occupe d'un client) j'appelle une fonction stop() de cette classe pour qu'il coupe proprement la connexion avec son client.
    Mais si le thread est celui que attend les connexion sur la socket, il est bloqué en, attente de connexion donc il faudrait le forcer a arreter d'attendre une nouvelle connexion et lui faire couper la connexion a la base de données proprement. Et la, je n'y arrive pas...!
    J'ai essayé de créer une fonction __del__() dans cette classe mais on passe jamais dedant meme en appellant _Thread__stop()

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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