Einfacher Threading XML-RPC Server und Client

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Soll der XMLRPC-Server mehrere Verbindungen gleichzeitig bedienen können, dann sollte man auf den ThreadingTCPServer setzen.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
******************************************************************************
* Simple Threading XMLRPC-Server
******************************************************************************
"""

from SocketServer import ThreadingTCPServer
from SimpleXMLRPCServer import SimpleXMLRPCRequestHandler
from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
from random import randint
import time
import sys

class SimpleThreadingXMLRPCServer(ThreadingTCPServer, SimpleXMLRPCDispatcher):
    def __init__(self, addr, requestHandler = SimpleXMLRPCRequestHandler, logRequests = 1):
        self.logRequests = logRequests
        if sys.version_info[:2] < (2, 5):
            SimpleXMLRPCDispatcher.__init__(self)
        else:
            SimpleXMLRPCDispatcher.__init__(self, allow_none = False, encoding = None)
        ThreadingTCPServer.__init__(self, addr, requestHandler)

class XmlrpcHandler:
    def get_random_int(self, from_int, to_int):
        time.sleep(2) # Zum Testen wird hier zwei Sec. gewartet.
        return randint(from_int, to_int)

server = SimpleThreadingXMLRPCServer(("localhost", 50505))
server.register_instance(XmlrpcHandler())
print "Der XMLRPC-Server horcht auf http://localhost:50505."
print "Er kann mit STRG+C oder STRG+PAUSE beendet werden."
server.serve_forever()

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
******************************************************************************
* Einfacher XMLRPC-Client mit 50 Threads zum Testen der Belastungsfähigkeit
* des "Simple Threading XMLRPC-Servers".
******************************************************************************
"""

import xmlrpclib
import threading
import time

class MeinThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
    
    def run(self):
        server = xmlrpclib.ServerProxy("http://localhost:50505")
        print server.get_random_int(1, 99)

# 50 Threads im Abstand von 0.01 sec. starten
threads = []
for i in range(50):
    threads.append(MeinThread())
    threads[-1].start()
    time.sleep(0.01)
print "Threads gestartet"

# Auf die Threads warten
for t in threads:
    t.join()
print "Fertig"
Siehe auch Einfacher XML-RPC Server und Client.

mfg
Gerold
:-)

Stichworte: Thread Threading XML XML-RPC XMLRPC

Edit: Mit Python 2.5 ändert sich die Anzahl der Parameter von ``SimpleXMLRPCDispatcher`` (Bastl, danke für den Hinweis!)
Zuletzt geändert von gerold am Samstag 29. August 2009, 07:16, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mit Python 2.5 ändert sich die Anzahl der Parameter von ``SimpleXMLRPCDispatcher``

Bastl, danke für den Hinweis!
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Danipol
User
Beiträge: 38
Registriert: Sonntag 1. Februar 2009, 21:08

vielleicht kannst du mir helfen.

Und wie starte ich das Script jetzt?
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Beide Codesnippets in nen Python-Modul und dann erst den Server und dann den Client ausführen ;-)
Danipol
User
Beiträge: 38
Registriert: Sonntag 1. Februar 2009, 21:08

online. Was muss ich beachten? Reicht das:

http://user.baden-online.de/~pjanssen/a ... index.html
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi und frohes Neues Jahr an alle.

Hab mal ne Frage zum Client Script. Das Script nutzt Threading nur zu Testzwecken, um gleichzeitig mehrere Anfragen an den Server schicken zu können, richtig? Für einen "normalen" Client ist das nicht nötig
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ja.
Antworten