mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Merge pull request #1031 from jhekkanen/1030-fix
Fix self.nr usage in ThreadedWorker so that auto restart works as expected
This commit is contained in:
commit
3a2c437902
@ -92,6 +92,7 @@ class ThreadWorker(base.Worker):
|
|||||||
self._lock = None
|
self._lock = None
|
||||||
self.futures = deque()
|
self.futures = deque()
|
||||||
self._keep = deque()
|
self._keep = deque()
|
||||||
|
self.nr_conns = 0
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def check_config(cls, cfg, log):
|
def check_config(cls, cfg, log):
|
||||||
@ -131,7 +132,7 @@ class ThreadWorker(base.Worker):
|
|||||||
client, addr = listener.accept()
|
client, addr = listener.accept()
|
||||||
# initialize the connection object
|
# initialize the connection object
|
||||||
conn = TConn(self.cfg, listener, client, addr)
|
conn = TConn(self.cfg, listener, client, addr)
|
||||||
self.nr += 1
|
self.nr_conns += 1
|
||||||
# enqueue the job
|
# enqueue the job
|
||||||
self.enqueue_req(conn)
|
self.enqueue_req(conn)
|
||||||
except socket.error as e:
|
except socket.error as e:
|
||||||
@ -170,7 +171,7 @@ class ThreadWorker(base.Worker):
|
|||||||
self._keep.appendleft(conn)
|
self._keep.appendleft(conn)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.nr -= 1
|
self.nr_conns -= 1
|
||||||
# remove the socket from the poller
|
# remove the socket from the poller
|
||||||
with self._lock:
|
with self._lock:
|
||||||
try:
|
try:
|
||||||
@ -202,7 +203,7 @@ class ThreadWorker(base.Worker):
|
|||||||
self.notify()
|
self.notify()
|
||||||
|
|
||||||
# can we accept more connections?
|
# can we accept more connections?
|
||||||
if self.nr < self.worker_connections:
|
if self.nr_conns < self.worker_connections:
|
||||||
# wait for an event
|
# wait for an event
|
||||||
events = self.poller.select(0.02)
|
events = self.poller.select(0.02)
|
||||||
for key, mask in events:
|
for key, mask in events:
|
||||||
@ -253,12 +254,12 @@ class ThreadWorker(base.Worker):
|
|||||||
self.poller.register(conn.sock, selectors.EVENT_READ,
|
self.poller.register(conn.sock, selectors.EVENT_READ,
|
||||||
partial(self.reuse_connection, conn))
|
partial(self.reuse_connection, conn))
|
||||||
else:
|
else:
|
||||||
self.nr -= 1
|
self.nr_conns -= 1
|
||||||
conn.close()
|
conn.close()
|
||||||
except:
|
except:
|
||||||
# an exception happened, make sure to close the
|
# an exception happened, make sure to close the
|
||||||
# socket.
|
# socket.
|
||||||
self.nr -= 1
|
self.nr_conns -= 1
|
||||||
fs.conn.close()
|
fs.conn.close()
|
||||||
|
|
||||||
def handle(self, conn):
|
def handle(self, conn):
|
||||||
@ -308,7 +309,7 @@ class ThreadWorker(base.Worker):
|
|||||||
resp, environ = wsgi.create(req, conn.sock, conn.addr,
|
resp, environ = wsgi.create(req, conn.sock, conn.addr,
|
||||||
conn.listener.getsockname(), self.cfg)
|
conn.listener.getsockname(), self.cfg)
|
||||||
environ["wsgi.multithread"] = True
|
environ["wsgi.multithread"] = True
|
||||||
|
self.nr += 1
|
||||||
if self.alive and self.nr >= self.max_requests:
|
if self.alive and self.nr >= self.max_requests:
|
||||||
self.log.info("Autorestarting worker after current request.")
|
self.log.info("Autorestarting worker after current request.")
|
||||||
resp.force_close()
|
resp.force_close()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user