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"
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!)