-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
After around 24 hours of running and accommodating 100.000s of requests, the script never frees memory and builds up to even 32GB.
class Handler(BaseHTTPRequestHandler):
handle_request: Callable
def __init__(self, *args, **kwargs):
self.handle_request = kwargs['handle_request']
del kwargs['handle_request']
super(Handler,self).__init__(*args, **kwargs)
def setup(self) -> None:
self.timeout = HTTP_REQUEST_TIMEOUT
BaseHTTPRequestHandler.setup(self)
self.request.settimeout(HTTP_REQUEST_TIMEOUT)
def do_POST(self):
try:
length = int(self.headers.get('content-length'))
b64_auth = self.headers.get('authorization')
if b64_auth != HTTP_SERVICE_AUTHENTICATION_B64:
self.send_response(401)
self.end_headers()
return
js = json.loads(self.rfile.read(length))
#self.rfile.read(length)
#print(js)
response = self.handle_request(js)
self.send_response(200)
self.end_headers()
self.wfile.write(json.dumps(response).encode('utf-8'))
except Exception as ex:
self.send_response(503, json.dumps(ex.__dict__))
self.end_headers()
pass
def do_GET(self):
self.send_response(200)
self.end_headers()
class ThreadingSimpleServer(PooledProcessMixIn, HTTPServer):
def __init__(self,bind_addr, handler, processes, threads) -> None:
self._process_n=processes # if not set will default to number of CPU cores
self._thread_n=threads # if not set will default to number of threads
HTTPServer.__init__(self, bind_addr, handler)
#self._init_pool() # this is optional, will be called automatically
Metadata
Metadata
Assignees
Labels
No labels