Seite 1 von 1

XML-RPC Client vorzeitig beenden

Verfasst: Freitag 9. März 2007, 14:57
von antaeus
Hallo zusammen!

Ich rufe aus einem Programm Methoden remote mit XML RPC auf. Manchmal kann es passieren, dass die Antwort des XML RPC Servers sehr lange auf sich warten lässt. Was muss ich tun, um den wartenden XML RPC Client vorzeitig zu beenden?

Ich suche leider schon eine kleine Ewigkeit im Netz herum, finde aber dazu keine Antwort.

Code: Alles auswählen

from xmlrpclib import ServerProxy, Error
from threading import Thread
from time import sleep


class XMLRPC_Thread(Thread):

    def __init__(self):
        Thread.__init__(self)
        hostname="192.168.0.31"
        port = 33333
        host=(hostname, port)
        uri = "http://"+host[0]+":"+str(host[1])
    
        self.test_node = ServerProxy(uri)
        
    def run(self):
        try:            
            x = self.test_node.get_stuck() # Aufruf blockiert beliebig lang
        except Error, v:
            print "Error", v

    def stop(self):
        # wie kann man den Client stoppen??
        pass

x = XMLRPC_Thread()
x.start() # starte XMLRPC Thread

sleep(10) # warte 10 Sekunden

x.stop() #stoppe XMLRPC Thread



Verfasst: Freitag 9. März 2007, 16:16
von Masaru
Nicht gerade "simple", aber schonmal umgesetzt worden: --Link--

(der Code ist weder von mir, noch selber getestet, sondern lediglich ergoogelt und muss stark auf das eigene Ziel hin wohl angepasst werden !!!)

Gruß,
>>Masaru<<

Verfasst: Freitag 9. März 2007, 18:18
von gerold
Hi antaeus!

Man kann den Socket-Timeout global einstellen. Das ist für einzelne Prozesse eine einfache Sache, aber wenn du mit Threads arbeitest, weiß ich nicht, wie sich das auf das restliche Programm auswirkt. Man müsste es mal ausprobieren...

Siehe: http://www.python-forum.de/post-33277.html

mfg
Gerold
:-)

Verfasst: Donnerstag 15. März 2007, 09:52
von antaeus
gerold, du bist mein ganz persönlicher Held des Tages!

Ich habe zwar das XML-Problem noch nicht weiter verfolgt (kommt später), konnte aber mit dem "setdefaulttimeout" ein anderes Problem lösen! Vielen Dank!