xmlrpc

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich habe einen XML-RPC-Server und einen Client. Nun ist mir aufgefallen, dass eine Anfrage etwas mehr als 1 Sekunde braucht.

Jetzt frage ich mich, woran das liegt, dass der so lange braucht. Ist xmlrpc so langsam? Und warum sind es immer etwas mehr als 1 Sekunde (~ 1.02)?

Das ist der Code:

Code: Alles auswählen

from threading import Thread
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler

def test(a):
    return a

server = SimpleXMLRPCServer(("localhost", 12345))
server.register_function(test)
t = Thread(target=server.serve_forever)
t.setDaemon(True)
t.start()

import xmlrpclib 
import socket
import time

socket.setdefaulttimeout(2)
try:
    s = xmlrpclib.Server('http://localhost:12345')
    
    for i in range(10):
        t = time.time()
        s.test('x')
        t = time.time() - t
        print t
except socket.timeout:
    pass
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jbs hat geschrieben:Ich habe einen XML-RPC-Server und einen Client. Nun ist mir aufgefallen, dass eine Anfrage etwas mehr als 1 Sekunde braucht.
Hallo jbs!

Es muss nicht unbedingt direkt damit http://www.python-forum.de/topic-11029.html etwas zu tun haben. Aber vielleicht geht dein Problem in eine ähnliche Richtung. :K

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Das Problem das Gerold in dem verlinkten Thread beschrieben hat kann meiner Meinung nach mit folgender Konfiguration umgangen werden:

Code: Alles auswählen

server = SimpleXMLRPCServer(("localhost", 12345), logRequests=False) 
Die Ermittlung des client namens via DNS wird meines Wissens nur für die Log-Ausgabe ermittelt.
Das kann man auf jeden Fall schnell ausprobieren.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich habe mir das Ganze genauer angeschaut und festgestellt, dass die Sekunde Verzögerung in `xmlrpclib.Transport.send_content` in der Zeile `connection.endheaders()` liegt.

Mit socket habe ich die Antwort innerhalb von 0.2 Sekunden.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

jbs hat geschrieben:Verzögerung in `xmlrpclib.Transport.send_content` in der Zeile `connection.endheaders()` liegt.
Hallo jbs!

Das sagt mir jetzt nicht unbedingt viel. Da du den Server und den Client in einem einzigen Prozess betreibst und somit gemeinsam getestet hast.

Hast du das Zeitproblem auch noch, wenn der Server als eigenständiges Programm so wie hier http://www.python-forum.de/topic-5478.html läuft?

XMLRPC hat zwar von seiner Natur aus einen enormen Overhead (siehe: http://de.wikipedia.org/wiki/XML-RPC#Beispiele), aber so langsam wie du es beschreibst, ist es auch wieder nicht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ja, ich habe es getrennt gestartet und habe es dann zur Übersicht in 1 Skript gesteckt.

Doch es ist so langsam. Ich habe gerade festgestellt, dass das Problem nur unter Windows 7 besteht. Bei XP lief es so schnell wie erwartet.

Mal schauen ob ich einen Vista Rechner auftreiben kann...
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Hallo Leute,

entschuldigt, dass ich den Thread nochmal aufwärme. Wie es scheint, wurde er mit einem Achselzucken Richtung Win 7 beendet, aber es scheint sich auch um mein Problem zu handeln.

Ich habe einen auf XMLRPC (SimpleXMLRPCServer) basierenden Chat geschrieben. Der LIEF auch eine ganze Weile ohne merkliche Verzögerungen wie geschmiert. Doch vor etwa einem halben bis dreiviertel Jahr begann die GUI (Tkinter) während der Eingabe einzufrieren. Damals haben wir das Problem aber nicht weiter untersucht. Ich weiß nur, dass weder er noch ich bewusst eine größere Systemänderung durchgeführt haben.

Wir benutzen beide Windows 7. Gestern haben mein Freund und ich uns daran gemacht, das Problem genauer zu untersuchen. Ich habe je einen Echo-server und Client mit socket und mit xmlrpc implementiert. Server war ich (anders herum klappte es wegen irgendwelchen Einstellungen nicht).

Ergebnis:
Über Socket lief alles zügig (lokal 0.005 Sekunden, von meinem Freund aus < 0.1 Sekunden)
Über XML-RPC lief es bei mir zügig (0.01 s bis 0.015 s), aber mein Freund hatte eine Antwortzeit von ca. 5-6 Sekunden. Es fiel auf, dass der serverseitige Prozeduraufruf (die Printausgabe daran) ohne merkliche Verzögerung erschien, aber die zweite Zeile (automatisch vom XMLRPC-Server, in der der Host geloggt wird) wurde erst nach besagten 5 Sekunden ausgegeben, wonach die Antwort wieder schnell bei meinem Freund war.

Ich gehe also davon aus, dass die Verzögerung während der Verarbeitung des Prozedurergebnisses entsteht. Habe oben den Tipp mit Umgehung des Nameservers gelesen und werde das mit meinem Freund ausprobieren. Wäre aber schon komisch, wenn das ca. 5 Sekunden dauert.

Wenn ihr den Code für die Test-Server/-Clients möchtet, kann ich sie hier posten.

Falls jemand das Problem schon kennt und weiß, wie man es beseitigt, wäre ich sehr dankbar.

Viele Grüße,
Micha
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Kurze Info: Zaps Vorschlag, das Logging zu deaktivieren, hat die Verzögerung beseitigt. Eine Lösung ist es zwar nicht, aber momentan kann ich auf das Logging verzichten. Danke!
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten