mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
notify before stopping.
This commit is contained in:
parent
5ff6cd173f
commit
c41d3edd36
@ -8,11 +8,10 @@ from __future__ import with_statement
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import gevent
|
import gevent
|
||||||
from gevent import monkey
|
|
||||||
monkey.noisy = False
|
|
||||||
from gevent.pool import Pool
|
from gevent.pool import Pool
|
||||||
from gevent.server import StreamServer
|
from gevent.server import StreamServer
|
||||||
from gevent import pywsgi, wsgi
|
from gevent import pywsgi, wsgi
|
||||||
|
from gevent import hub
|
||||||
|
|
||||||
import gunicorn
|
import gunicorn
|
||||||
from gunicorn.workers.async import AsyncWorker
|
from gunicorn.workers.async import AsyncWorker
|
||||||
@ -37,9 +36,8 @@ class GGeventServer(StreamServer):
|
|||||||
self.handle_func = handle
|
self.handle_func = handle
|
||||||
self.worker = worker
|
self.worker = worker
|
||||||
|
|
||||||
def stop(self):
|
def stop(self, timeout=None):
|
||||||
super(GGeventServer, self).stop()
|
super(GGeventServer, self).stop(timeout=timeout)
|
||||||
self.worker.alive = False
|
|
||||||
|
|
||||||
def handle(self, sock, addr):
|
def handle(self, sock, addr):
|
||||||
self.handle_func(sock, addr)
|
self.handle_func(sock, addr)
|
||||||
@ -52,6 +50,7 @@ class GeventWorker(AsyncWorker):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def setup(cls):
|
def setup(cls):
|
||||||
from gevent import monkey
|
from gevent import monkey
|
||||||
|
monkey.noisy = False
|
||||||
monkey.patch_all()
|
monkey.patch_all()
|
||||||
|
|
||||||
def timeout_ctx(self):
|
def timeout_ctx(self):
|
||||||
@ -72,12 +71,14 @@ class GeventWorker(AsyncWorker):
|
|||||||
if self.ppid != os.getppid():
|
if self.ppid != os.getppid():
|
||||||
self.log.info("Parent changed, shutting down: %s" % self)
|
self.log.info("Parent changed, shutting down: %s" % self)
|
||||||
break
|
break
|
||||||
gevent.sleep(self.timeout)
|
gevent.sleep(0.1)
|
||||||
|
|
||||||
|
# Try to stop connections until timeout
|
||||||
|
self.notify()
|
||||||
|
server.stop(timeout=self.timeout)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
with gevent.Timeout(self.timeout, False):
|
|
||||||
gevent.spawn(server.stop).join()
|
|
||||||
|
|
||||||
def init_process(self):
|
def init_process(self):
|
||||||
#gevent doesn't reinitialize dns for us after forking
|
#gevent doesn't reinitialize dns for us after forking
|
||||||
@ -106,6 +107,7 @@ class GeventBaseWorker(Worker):
|
|||||||
def setup(cls):
|
def setup(cls):
|
||||||
from gevent import monkey
|
from gevent import monkey
|
||||||
monkey.patch_all()
|
monkey.patch_all()
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.socket.setblocking(1)
|
self.socket.setblocking(1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user