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 :

Délais d'attente dans un réseau


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut Délais d'attente dans un réseau
    Bonsoir,

    Je suis vraiment dans le caca, sa fait plusieurs heures que je cherche comment résoudre ce @þ#→½{#→ de problème a la noix de coca ... ( :-° )

    J'vous explique. J'ai un serveur pour un jeu, les clients se connectent, puis quand il y a asser de joueurs le serveur lance une commande qui préviens tout le monde du commencement de la partie. Là le serveur rentre dans la phase de la partie en elle meme, du tour par tour.

    Je lance donc un thread qui est une boucle infinie qui se stoppe quand il y a un vainqueur. Sinon il parcourt une boucle interne qui est censée donner "la main" tour a tour a chaqun des clients. Mais cette boucle interne doit etre régie par l'envoi et la réception des communication externes. J'aimerais que le délais dans cette boucle soit de 30 secondes MAXIMUM. C'est a dire que si le client réponds dans les 30 secondes, il fait quelque chose, mais si il ne réponds pas dans les temps imparti il fait autre chose.
    Donc la boucle ne doit pas etre completement stoppée a ce moment.

    Pour mieux expliquer ce que je veux je vais faire un pseudo-code de ma boucle ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    def Partie(): # lancée en thread
        while True: # tourne sans fin jusqu'a ce qu'il y ait un vainqueur
            if Vainqueur:
                break
            else: # boucle principale qui parcourt la liste des joueurs
                for joueur in listeClients:
                    EnvoiRequete(joueur,"t'a la main") # previen que c'est a sont tour
                    # Et c'est ici que je bloque, je ne sais pas trop comment faire pour lui dire d'attendre
                    if reponse: # si il reçoit une réponse du client avant les 30 secondes
                        # code
                    else: # si il n'a pas reçu de réponse de la part du client qui a la main
                        # code

    Donc voilà grosso modo ce que je voudrais pouvoir faire.
    Certains m'ont parlé d'un thread Timer, j'ai regarder la doc mais je n'arrive pas a l'utiliser :/
    J'ai aussi essayer avec un time.sleep() mais je pense que sa ne marchera pas parce que il doit pouvoir rester a l'écoute du client pendant ces 30 secondes.

    J'ai vraiment besoin d'aide ET TRES VITE !!! Celui qui pourra m'aider est le bienvenue ici ^^
    PS : J'ai pas le temps pour les select

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par ghilan Voir le message
    PS : J'ai pas le temps pour les select
    C'est dommage. C'est facile et ça règlerait ton problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    clients = [client1, client2, ...]
    rlist, wlist, elist = select(clients, [ ], [ ], 30)
     
    for client in rlist:
        handle_client

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Comme tes clients se connectent à un serveur, il se peut que ceci puisse t'intéresser:

    http://www.voidspace.org.uk/python/a...ets-and-layers

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    C'est quoi select , SVP ?

  5. #5
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Select est une fonction qui permet d'écouter, en quelque sorte, des sockets (et sous Unix tous les autres fichiers). De cette écoute résultent des ensembles. Ici rlist, wlist et elist. Ces ensembles décrivent les descripteurs de fichiers qui sont prêts pour, respectivement, la lecture, l'écriture, et l'erreur (c'est un peu flou pour moi ce dernier point...).

    Ca évite de devoir recourir au multithread pour faire des applications serveur. Parce que les threads sont lourdes à l'exécution. Cette lourdeur est due au fait que le programme, pour passer d'un thread à l'autre, doit effectuer ce que l'on appelle un context switching, et de ce fait sauvegarder les registres du processeurs et pas mal d'autres infos, puis recharger celles du thread qui va être exécuté.

    C'est encore pire pour fork, qui sont des processus lourds (contrairement aux thread dits "légers"), puisque dans ce cas c'est carrément toute la mémoire du processus qui est dupliquée.

    Mmmmh, j'ai un peu débordé, sorry :p c'est à force d'étudier mes cours ça ^^ D'ailleurs si quelqu'un voit une faute, qu'il me le dise

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Non, c'est très intéressant. Tu donnes en quelques mots un panorama de notions qui ne se dégagent que lentement si on étudie seul comme je le fais. C'est ce genre de considérations générales, qui prennent les choses d'un peu plus haut que les descriptions précises des Library References, qui manquent, je trouve. Il faut dire que je devrais lire des bouquins un peu plus.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut
    Merci antoine pour cette aide sur les select, mais comment pourrai-je très concrètement l'utiliser dans mon programme ?

    Je n'ai vraiment pas le courage, ni le temps d'ailleur de voir cette méthode. ...

Discussions similaires

  1. fenêtre d'attente dans un thread
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2005, 10h29
  2. "Délai d'attente expiré" aléatoire
    Par denilson74 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/07/2005, 10h48
  3. Délai d'attente expiré
    Par zut94 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/07/2005, 21h50
  4. Délai d'attente expiré
    Par amiral thrawn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 12h04
  5. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01

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