multithread webserver probleme
Verfasst: Mittwoch 23. Mai 2007, 16:16
hi,
zuerst der code:
das ganze funzt ohne probleme (python 2.5.1 @ windows). wenn ich allerdings mehrmals die seite aufrufe, erhöht sich der verbrauche arbeitsspeicher des prozesses und wird nicht freigeben was dann irgendwann zum crash führt... wüßte jemand wo das problem liegt? ich schätze irgendwie bei dem threadTCPServer mit den threads oder so ähnlich?
zuerst der code:
Code: Alles auswählen
# multithreading httpd - test
try:
import psyco
psyco.full()
except ImportError:
print 'Psyco not installed, the program will just run slower'
import SocketServer, socket, BaseHTTPServer, os
class MyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def __del__(self):
print 'object deleted.'
def do_GET(self):
self.send_text('test')
def send_text(self, text, mimetype='text/html', code=200):
self.send_response(code)
self.send_header('Content-type', mimetype)
self.send_header('Content-Length', str(len(text)))
self.end_headers()
self.wfile.write(text)
self.wfile.flush()
class MyThreadingServer(SocketServer.ThreadingTCPServer):
def __init__(self, server_address, request_handler, AllowIPs):
SocketServer.ThreadingTCPServer.__init__(self, server_address, request_handler)
self.AllowIPs = [mask.split('.') for mask in AllowIPs]
def server_bind(self):
SocketServer.ThreadingTCPServer.server_bind(self)
host, self.server_port = self.socket.getsockname()[:2]
self.server_name = socket.getfqdn(host)
def verify_request(self, dummy, client_address):
def check_ip(mask):
for mask_part, ip_part in zip(mask, ip):
if mask_part != ip_part and mask_part != '*':
return False
return True
ip = client_address[0].split('.')
for mask in self.AllowIPs:
if check_ip(mask):
return True
print "IP [%s] not allowed!" % client_address
return False
def ServerStart(ListenPort, AllowIPs):
print "Starte HTTP-Server auf Port .:", ListenPort
print "Zugelassener IP-Bereich .....:", AllowIPs
httpd = MyThreadingServer(("", ListenPort), MyRequestHandler, AllowIPs)
httpd.serve_forever()
if __name__=="__main__":
ServerStart(ListenPort=6667, AllowIPs=('*.*.*.*'))