Seite 1 von 1

Einfacher Threading XML-RPC Server und Client

Verfasst: Mittwoch 18. Oktober 2006, 15:22
von gerold
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!)

Verfasst: Sonntag 18. Februar 2007, 10:48
von gerold
Mit Python 2.5 ändert sich die Anzahl der Parameter von ``SimpleXMLRPCDispatcher``

Bastl, danke für den Hinweis!

re

Verfasst: Freitag 28. August 2009, 23:30
von Danipol
vielleicht kannst du mir helfen.

Und wie starte ich das Script jetzt?

Verfasst: Freitag 28. August 2009, 23:50
von Dauerbaustelle
Beide Codesnippets in nen Python-Modul und dann erst den Server und dann den Client ausführen ;-)

re

Verfasst: Samstag 29. August 2009, 18:53
von Danipol
online. Was muss ich beachten? Reicht das:

http://user.baden-online.de/~pjanssen/a ... index.html

Verfasst: Samstag 2. Januar 2010, 10:50
von burli
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

Verfasst: Samstag 2. Januar 2010, 12:04
von sma
Ja.