Fast XML-RPC für Python 2.5

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Hallo zusammen,

ich beschäftige mich gerade mit der Frage ob ich einen bestehenden XML-RPC Server in Sachen Datenübertragung beschleunigen kann oder ob dies garnicht mehr nötig/möglich ist.
Ich habe den Server unter Python 2.5 laufen und habe einen Anwendungsfall bei dem u.U. größere Datenmengen (~100MB über ein 100Mbit LAN) übertragen werden müssen. Die Performance ist hinnehmbar, würde sie doch gerne optimieren.

Ich habe gelesen das es zur Python 2.2 Zeit ein Modul bei Sourceforge gab mit der Bezeichnung "fast xmlrpc". Wisst ihr ob es einen Nachfolger von diesem Modul für Python 2.5 gibt oder ist dies vielleicht garnicht mehr notwendig?
Gibt es vielleicht Konfigurationsmöglichkeiten um die mitgelieferten xmlrpclib von Python für größere Datenübertragungen zu optimieren?

Vielen Dank schonmal
Gruß Zap
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zap hat geschrieben:ich beschäftige mich gerade mit der Frage ob ich einen bestehenden XML-RPC Server in Sachen Datenübertragung beschleunigen kann oder ob dies garnicht mehr nötig/möglich ist.
Es ist... schwer. XML-RPC benutzt zur Übertragung ein Textformat, die Daten müssen also erstmal in XML serialisiert werden. Wenn du wirklich schnellere Transfers haben willst, dann solltest du ma prüfen, ob du mit CORBA oder Ice nicht schneller bist (zum Thema IPC habe ich einen Tag bei Simpy, schau mal rein). Ich denke, dass möglicherweise YAML-RPC (*hust*) oder JSON-RPC schneller wären als XML-RPC - aber auch nicht viel.
Zap hat geschrieben:Ich habe gelesen das es zur Python 2.2 Zeit ein Modul bei Sourceforge gab mit der Bezeichnung "fast xmlrpc". Wisst ihr ob es einen Nachfolger von diesem Modul für Python 2.5 gibt oder ist dies vielleicht garnicht mehr notwendig?
Das Modul gibt es immer noch, es heißt py-xmlrpc und sollte auch noch mit Python 2.5 funktionieren.
Zap hat geschrieben:Gibt es vielleicht Konfigurationsmöglichkeiten um die mitgelieferten xmlrpclib von Python für größere Datenübertragungen zu optimieren?
Nein. Was erwartest du denn? Dass die xmlrpclib standardmäßig auf "slow" eingestellt ist, nur um Leute zu ärgern? :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Leonidas hat geschrieben:
Zap hat geschrieben:Gibt es vielleicht Konfigurationsmöglichkeiten um die mitgelieferten xmlrpclib von Python für größere Datenübertragungen zu optimieren?
Nein. Was erwartest du denn? Dass die xmlrpclib standardmäßig auf "slow" eingestellt ist, nur um Leute zu ärgern? :twisted:
:P Ich hatte ehr an sowas Gedacht was vielleicht bei großen Datenmengen von vorteil, im Gegenzug bei "normalen" requests ehr ne Bremse und deshalb standartmäßig nicht aktiv ist (Buffereinstellungen, Blockgrößen oder wasweissich ;) )

Danke schonmal für die ganzen Tipps. Werde mir die Möglichkeiten mal genauer anschauen.
lunar

Zap hat geschrieben:Ich habe den Server unter Python 2.5 laufen und habe einen Anwendungsfall bei dem u.U. größere Datenmengen (~100MB über ein 100Mbit LAN) übertragen werden müssen. Die Performance ist hinnehmbar, würde sie doch gerne optimieren.
Wenn dir die Performance so wichtig ist, dann solltest du solche Datenmenge direkt über Sockets verschicken, um dir den ganzen Overhead des RPC Protokolls zu sparen. Das geht natürlich zu Lasten des Programmierkomforts, aber das ist nun mal so, wenn man optimieren will.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Ne, das steht nicht zur Diskusion, so einen Aufwand brauche ich da auch nicht betreiben.
Die ganze Sache soll schon weiter über XMLRPC (http) funktionieren.
Sonst hätte ich alternative eh schon ftp oder ähnliches als Ausweichprotokoll verwendet um die Datenübertragung umzusetzen.

Ich werde einfach mal gucken ob ich hier oder da ein paar Prozent rauskitzeln kann. Wenn nicht, ist auch nicht schlimm.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zap hat geschrieben:Ich werde einfach mal gucken ob ich hier oder da ein paar Prozent rauskitzeln kann. Wenn nicht, ist auch nicht schlimm.
Schon py-xmlrpc ausprobiert? Ich wäre in Vergleichswerten gegenüber dem mitgelieferten Server interessiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Ne, noch nicht, musste eine andere Arbeit zwischenschieben.
Wenn ich dazu komme reiche ich vergleichswerte nach.
ronny
User
Beiträge: 9
Registriert: Donnerstag 19. Juli 2007, 14:50

fals nur http zwingend ist, könnte man das xmlrpc weglassen, und die daten als multipart http post message verschicken
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

hätttest du da vielleicht ein Beispiel für mich?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Also cich habe das py-xmlrpc Modul mal ausprobiert und konnte keine Zeitunterschiede fesstellen. Was mich allerdings nicht verwundert hat, da meine Anwendung nicht in die von py-xmlrpc überschriebenen Methoden gelandet ist. Der dort überschriebene als Flinker Geselle versprochene Marshaller blieb Arbeitslos und bekam nichts zu tun.
Das Modul wurde aber erfolgreich in den Programmablauf mit eingebunden, scheint aber nicht 100% kompatibel zu sien.
Naja, ich habe die ganze sache mit Komprimierungen und ähnlichen verbessern können. Das reicht fürs erste.
Antworten