reduce wakeups in httpsrv

This commit is contained in:
ed 2021-10-27 22:20:21 +02:00
parent 744727087a
commit 598d6c598c

View file

@ -50,10 +50,9 @@ class HttpSrv(object):
self.log = broker.log self.log = broker.log
self.asrv = broker.asrv self.asrv = broker.asrv
nsuf = "-{}".format(nid) if nid else "" nsuf = "-n{}-i{:x}".format(nid, os.getpid()) if nid else ""
nsuf2 = "-n{}-i{:x}".format(nid, os.getpid()) if nid else ""
self.name = "hsrv" + nsuf2 self.name = "hsrv" + nsuf
self.mutex = threading.Lock() self.mutex = threading.Lock()
self.stopping = False self.stopping = False
@ -61,6 +60,7 @@ class HttpSrv(object):
self.tp_ncli = 0 # fading self.tp_ncli = 0 # fading
self.tp_time = None # latest worker collect self.tp_time = None # latest worker collect
self.tp_q = None if self.args.no_htp else queue.LifoQueue() self.tp_q = None if self.args.no_htp else queue.LifoQueue()
self.t_periodic = None
self.u2fh = FHC() self.u2fh = FHC()
self.srvs = [] self.srvs = []
@ -93,10 +93,6 @@ class HttpSrv(object):
if self.args.log_thrs: if self.args.log_thrs:
start_log_thrs(self.log, self.args.log_thrs, nid) start_log_thrs(self.log, self.args.log_thrs, nid)
t = threading.Thread(target=self.periodic, name="hsrv-pt" + nsuf)
t.daemon = True
t.start()
def start_threads(self, n): def start_threads(self, n):
self.tp_nthr += n self.tp_nthr += n
if self.args.log_htp: if self.args.log_htp:
@ -120,7 +116,7 @@ class HttpSrv(object):
def periodic(self): def periodic(self):
while True: while True:
time.sleep(2 if self.tp_ncli else 10) time.sleep(2 if self.tp_ncli or self.ncli else 10)
with self.mutex: with self.mutex:
self.u2fh.clean() self.u2fh.clean()
if self.tp_q: if self.tp_q:
@ -128,6 +124,10 @@ class HttpSrv(object):
if self.tp_nthr > self.tp_ncli + 8: if self.tp_nthr > self.tp_ncli + 8:
self.stop_threads(4) self.stop_threads(4)
if not self.ncli and not self.u2fh.cache and self.tp_nthr <= 8:
self.t_periodic = None
return
def listen(self, sck, nlisteners): def listen(self, sck, nlisteners):
ip, port = sck.getsockname() ip, port = sck.getsockname()
self.srvs.append(sck) self.srvs.append(sck)
@ -186,6 +186,16 @@ class HttpSrv(object):
with self.mutex: with self.mutex:
self.ncli += 1 self.ncli += 1
if not self.t_periodic:
name = "hsrv-pt"
if self.nid:
name += "-{}".format(self.nid)
t = threading.Thread(target=self.periodic, name=name)
self.t_periodic = t
t.daemon = True
t.start()
if self.tp_q: if self.tp_q:
self.tp_time = self.tp_time or now self.tp_time = self.tp_time or now
self.tp_ncli = max(self.tp_ncli, self.ncli) self.tp_ncli = max(self.tp_ncli, self.ncli)