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

Réseau/Web Python Discussion :

Sockets et threads...


Sujet :

Réseau/Web Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Sockets et threads...
    Bonjour, je débute en python ainsi qu'en programation (J'ai fais un peu de vb et de php avant mais rien de tres important). J'ai lu le cours de Gérard Swinnen mais je trouve qu'il explique que très peu l'utilisation des sockets. Il n'y a qu'un example similaire à celui de la doc python + explications.


    Or, je voudrais savoir comment faire pour qu'un serveur quelconque continu de s'executer pendant l'attente de connexion (J'ai trouvé sur un forum que l'on peut utiliser des "Threads", d'où ma question plus bas), comment faire pour q'un serveur puisse être connecté avec plusieur client en même temps ainsi qu'une petite expliquation sur l'envoi d'information ( est-ce possible d'envoyer autre chose que du texte(des variables), si je crée une class comme celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class example:
        def __init__(self):
            self.nombre = 5
     
        def soustrait(self):
            self.nombre = self.nombre - 1
     
        def ajoute(self):
            self.nombre = self.nombre + 1
     
    ref = example()
    et que j'envoie ensuite 'ref' à un client, pourra-t-il executer print ref.nombre, ref.soustrait() ou ref.ajoute()? )


    deuxiement, qu'est-ce que ce mistérieux "treath"? à quoi sert-t-il? comment s'applique-t-il?


    merci d'avance de répondre à mes questions ou de me référer à un cours/livre/example. svp, ne me répondez pas des 'demi-réponse' du style "google est ton ami" ou "il y a un howto sur les sockets" ou encore "regarde dans la doc" , j'ai regarder sur tout les forum que j'ai trouvé grace à google mais je n'est rien trouvé qui répondait à mes questions.

    Si vous ne comprenez pas l'une (ou plusieurs) de mes questions, précisez moi lequel(s) et je me ferai un plaisir de tenter de réexpliquer plus clairement.

    Kiff

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2003
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 191
    Points : 158
    Points
    158
    Par défaut
    Pour ce qui concerne les sockets, l'implémentation en python est très proche de celle du C. Et un peu long à expliquer en détail... ;o) Vu que c'est le principe qui a l'air de poser problème, tu trouveras pas mal de doc à ce sujet sur le net...

    Pour ce qui est d'envoyer des objets, il te suffit d'utiliser la sérialisation (transformation d'un objet en chaine de caractères). c'est le module pickle qui te permettra de le faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Test: pass
     
    MonObj = Test()
    #Transformation de l'objet en string
    _str = pickle.dumps(MonObj)
    #Transformation de la string en objet
    Obj = pickle.loads(_str)
    J'espère que ca t'aidera un peu... ;o)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Salut,

    Je répond juste à ta question sur les threads. On dit qu'un programme est multi-thread lorsqu'il effectue plusieurs opération en même temps. C'est comme si tu avait plusieurs petits programmes s'executant en même temps dans un seul. Ce n'est pas la définition exacte, mais c'est pour te faire comprendre le principe.

    Par exemple, un serveur de chat (IRC par exemple), posède plusieurs threads. Une qui attend les connexions, et une par client connecté. Toutes ces threads tournent en même temps puisqu'il est hors de question de refuser les connexions parce qu'un client envoie un message.

    Un autre exemple est la coloration syntaxique des éditeurs. C'est une thread qui tourne en permanance en arrière plan, qui met les couleurs à ton code. Le reste des fonctionalitées de ton éditeur tourne dans une ou plusieurs autres threads.

    J'espère que tu as compris le principe. L'implémentation des threads en python est très simple. Il vaut mieux que tu les découvres par toi même. N'hesite pas à demander de l'aide par contre !!!

    Bon courage !

  4. #4
    uaz
    uaz est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Re: Sockets et threads...
    Le principe de fonctionnement d'un serveur multi-clients c'est en gros, tu crées une (ou plusieurs) sockets en écoute. A chaque connexion, tu crées un nouveau processus léger (thread) qui ne va écouter les commandes que d'un seul client. Il y'a donc autant de threads que de clients.

    Maintenant ce que toi tu veux faire peut très bien s'appliquer de cette façon, sauf qu'il te faudra plutot un processus créé avec fork() plutot qu'un thread sinon tu risques de galérer (un thread prend une fonction en argument, et utilise le contexte du processus père)

    En revanche je ne sais pas si les RMI sont implémentées en Python (comme en Java) où là tu peux envoyer directement un message (appel de méthode) en remote, c'est pas tout à fait la même chose que de transmettre l'objet entier et ça serait plus approprié à un modèle client/serveur :jap:

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci à tous!

    @Royd938: 1. Je suis en train de chercher de la doc sur les sockets en c.
    2. Le module pickle fonctionne parfaittement, merci.


    @uaz: je suis en train de chercher des infos sur les fork(), merci .


    Une autre question, dans la doc Python, comment savoir quels sont les fonctions et les arguments à écrire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    start_new_thread( function, args[, kwargs])
    ?

  6. #6
    uaz
    uaz est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    La fonction c'est celle que le thread va lancer. Et donc args représente la liste des arguments passés à cette fonction. kwargs ce sont les arguments ** (???)

    Donc en gros, c'est comme en C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def ma_fonction(arg1, arg2):
        pass
     
    def main():
        ...
        start_new_thread(ma_fonction, [5, "blah"])
    C'est tout

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    merci


    EDIT: Pour ce qui est des sockets, j'ai trouvé mon bonheur ici même ( http://c.developpez.com/WalrusSock/ )

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/05/2008, 16h30
  2. Socket et thread
    Par mayu5 dans le forum Réseau
    Réponses: 6
    Dernier message: 13/05/2008, 00h56
  3. problème socket et thread
    Par dc.sara dans le forum C
    Réponses: 2
    Dernier message: 12/03/2008, 07h58
  4. Programmation réseau : socket et thread
    Par roms712 dans le forum POSIX
    Réponses: 12
    Dernier message: 12/01/2007, 17h27
  5. Sockets TCP/ Threads
    Par guillaume16 dans le forum C++
    Réponses: 3
    Dernier message: 27/07/2006, 23h45

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