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 :

reception erreur timeout avec SUDS et un webservice.


Sujet :

Python

  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 464
    Par défaut reception erreur timeout avec SUDS et un webservice.
    bonjour,

    j'utilise python et suds pour envoyer une grosse trame dans un webservice.
    j'obtiens cette erreur à chauqe fois (sauf quand je diminue la quantité de données envoyéers) :

    File "/usr/lib/python2.4/suds/client.py", line 542, in __call__
    return client.invoke(args, kwargs)
    File "/usr/lib/python2.4/suds/client.py", line 602, in invoke
    result = self.send(soapenv)
    File "/usr/lib/python2.4/suds/client.py", line 637, in send
    reply = transport.send(request)
    File "/usr/lib/python2.4/suds/transport/https.py", line 64, in send
    return HttpTransport.send(self, request)
    File "/usr/lib/python2.4/suds/transport/http.py", line 77, in send
    fp = self.u2open(u2request)
    File "/usr/lib/python2.4/suds/transport/http.py", line 116, in u2open
    return url.open(u2request)
    File "urllib2.py", line 358, in open
    response = self._open(req, data)
    File "urllib2.py", line 376, in _open
    '_open', req)
    File "urllib2.py", line 337, in _call_chain
    result = func(*args)
    File "urllib2.py", line 1021, in http_open
    return self.do_open(httplib.HTTPConnection, req)
    File "urllib2.py", line 996, in do_open
    raise URLError(err)
    URLError: <urlopen error timed out>

    ma question : est-ce un problème du webservice qui met du temps à traiter ma demande et me répondre ou est-ce mon serveur qui met du temps à sortir ma trame ?

    Apparemment j'ai un timeout par défaut de 90s avec SUDS, ce qui est déjà pas mal.
    J'ai fait un test :
    à 48m51 j'envoie la trame (j'appuye sue le bouton)
    à 50m35 j'ai le message d'erreur ci-dessus. Soit environ 1m30 après (mes fameuses 90s par défaut)

    alors source du problème ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 718
    Par défaut
    Salut,
    Apparemment j'ai un timeout par défaut de 90s avec SUDS, ce qui est déjà pas mal.
    J'ai fait un test :
    à 48m51 j'envoie la trame (j'appuye sue le bouton)
    à 50m35 j'ai le message d'erreur ci-dessus. Soit environ 1m30 après (mes fameuses 90s par défaut)

    alors source du problème
    ?

    L'erreur est cohérente avec le setting donc les options sont:
    1. Augmentez le timeout,
    2. Réduire la taille des "buffers"
    3. Les segmenter
    4. Sous traiter la segmentation via un protocole qui segmente à votre place (genre ftp)

    Mais en gros c'est du tuning de la pile IP. Le forum Python n'est peut être pas le forum le plus fréquenté par les expertises qui vont bien.

    Vous ne mentionnez pas la taille du buffer qui pose problème, mais la pile IP va segmenter en fonction du MTU size.

    Par contre TCP va sur chaque extrémité dé-assembler/re-assembler pour livrer le buffer transmis.

    IP n'étant pas fiable, il pourra y avoir des retransmission _et_ tant qu'on part pas en tiemout, il faudra garder le reste à transmettre et les bout reçus à chaque extrémité.

    Ca immobilise durablement de la mémoire (ram) et comme c'est de la mémoire "système", çà en prive les autres pendant autant de temps.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 464
    Par défaut
    j'ai résolu mon problème.
    ça venait bien du paramètre TIMEOUT de la classe client de SUDS.
    Par défaut, il est de 90s. Je l'ai passé à 120s et ça marche bien à tous les coups.
    (Si je le remets à 90s et que j'envoie moins de données, ça fonctionne aussi)

    Les données que j'envoie en wsdl sont nombreuses (un copier collé dans un fichier texte ferait 5 à 10Mo dans un fichier xml).

    Ce que je ne sais pas c'est qu'est-ce qui est long :
    -mon client qui envoie sa trame (j'aurai un débit sortant très faible ?)
    -ou le serveur distant qui tardent à traiter ma trame et me renvoyer sa réponse (le serveur distant n'est pas accez puissant pour traiter tout et renvoyer rapidement sa réponse ?)
    -ou sa réponse (grosse aussi) qui tardent à revenir dans mon client (problème de parfeu ou bande passante qui la retarde ...?).

  4. #4
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 464
    Par défaut
    2. Réduire la taille des "buffers"
    3. Les segmenter
    4. Sous traiter la segmentation via un protocole qui segmente à votre place (genre ftp)
    comment on fait cela ?

    dans mon cas, j'envoie des données à un webservice, via une url wsdl..Etc. (bref, tu http).
    est-ce un paramètre sous linux (je suis en debian)?

    Et je n'ai aucune main sur le webservice (service privé distant)

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 718
    Par défaut
    Salut,
    comment on fait cela ?
    C'est une collaboration à construire entre client et serveur...

    Et je n'ai aucune main sur le webservice (service privé distant)
    Ah ben, il doit bien exister un webmestre ou autre interlocuteur à qui demander la moins mauvaise façon pour effectuer de gros transferts.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. debutant: erreur LNK2001 avec la librairie GSL
    Par drill3 dans le forum MFC
    Réponses: 6
    Dernier message: 25/04/2005, 13h58
  2. erreurs opengl avec devcpp
    Par Vermin dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/04/2004, 14h50
  3. Erreur EACCESSVIOLATION avec des compsts créés dynamiquement
    Par tsikpemoise dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/02/2004, 19h05
  4. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  5. Erreurs IIS avec Multiples Frames avec xmlrad
    Par powerlog dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/07/2003, 13h15

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