Je traite des demandes provenant de plusieurs clients XMLRPC via le réseau étendu. La chose fonctionne très bien pour, disons, une période d'un jour (parfois deux), puis se fige dans socket.py:SimpleXmlRpcServer _sock.rcv se fige après des milliers de demandes
data = self._sock.recv(self._rbufsize)
_sock.timeout est -1, _sock.gettimeout est Aucun
Il Je n'ai rien de spécial dans le thread principal (je ne reçois que des appels XMLRPC), il y a deux autres threads qui discutent avec DB. Ces deux threads fonctionnent bien et survivent à ce bloc (fait une vérification avec WinPdb). Les clients envoient des requêtes ne dépassant pas 1 Ko, et il n'y a pas de contenu spécial: juste des chaînes sympas et propres dans le dictionnaire. Entre deux blocages, je réponds à des dizaines de milliers de demandes sans problèmes. Pare-feu est éteint, pas de logiciel étrange sur la même machine, etc ...
J'utilise Windows XP et Python 2.6.4. J'ai vérifié les différences entre 2.6.4. et 2.6.5, et n'a rien trouvé d'important (ou est-ce que je me trompe?). La version 2.7 n'est pas une option car les binaires pour MySqlDB me manqueraient.
La seule chose qui arrive de temps en temps causée par les clients qui ont une mauvaise connexion Internet est que les sockets se brisent. Cela se produit toutes les 5-10 minutes (il y a seulement cinq clients qui accèdent au serveur toutes les 2 secondes).
J'ai passé beaucoup de temps sur cette question, maintenant je commence à perdre des idées quoi faire. Toute allusion ou pensée serait très appréciée.
Salut Alex, juste pour vous signaler rapidement que tout s'est bien passé. Maintenant, après 5 jours sans aucun problème, j'ose le dire. La capture était vraiment dans un délai d'attente fixe sans laisser SimpleXmlRPCServer sur son délai d'attente par défaut (None). Vous avez complètement résolu mon problème par cette suggestion. Cependant, il y a deux jours, j'ai attrapé urlib2 souffrant du même problème presque. Il a gelé dans les douilles.py aussi (autre appel socket.recv, à quelques lignes du précédent). –