mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
add after/before fork hooks
This commit is contained in:
parent
13d9288d69
commit
cb0be6d454
@ -50,6 +50,7 @@ class Arbiter(object):
|
|||||||
self.debug = kwargs.get("debug", False)
|
self.debug = kwargs.get("debug", False)
|
||||||
self.log = logging.getLogger(__name__)
|
self.log = logging.getLogger(__name__)
|
||||||
self.opts = kwargs
|
self.opts = kwargs
|
||||||
|
self.conf = kwargs.get("config", {})
|
||||||
self._pidfile = None
|
self._pidfile = None
|
||||||
self.master_name = "Master"
|
self.master_name = "Master"
|
||||||
|
|
||||||
@ -324,6 +325,7 @@ class Arbiter(object):
|
|||||||
|
|
||||||
worker = Worker(i, self.pid, self.LISTENER, self.modname,
|
worker = Worker(i, self.pid, self.LISTENER, self.modname,
|
||||||
self.timeout/2.0, self.debug)
|
self.timeout/2.0, self.debug)
|
||||||
|
self.conf.before_fork(self, worker)
|
||||||
pid = os.fork()
|
pid = os.fork()
|
||||||
if pid != 0:
|
if pid != 0:
|
||||||
self.WORKERS[pid] = worker
|
self.WORKERS[pid] = worker
|
||||||
@ -333,6 +335,7 @@ class Arbiter(object):
|
|||||||
worker_pid = os.getpid()
|
worker_pid = os.getpid()
|
||||||
try:
|
try:
|
||||||
self.log.info("Worker %s booting" % worker_pid)
|
self.log.info("Worker %s booting" % worker_pid)
|
||||||
|
self.conf.after_fork(self, worker)
|
||||||
worker.run()
|
worker.run()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
|
|||||||
@ -22,10 +22,10 @@ class Config(object):
|
|||||||
user=None,
|
user=None,
|
||||||
group=None,
|
group=None,
|
||||||
|
|
||||||
after_fork= lambda server, worker: server.logger.info(
|
after_fork= lambda server, worker: server.log.info(
|
||||||
"worker=%s spawned pid=%s}" % (worker.id, worker.pid)),
|
"worker=%s spawned pid=%s}" % (worker.id, str(worker.pid))),
|
||||||
|
|
||||||
before_fork= lambda server, worker: server.logger.info(
|
before_fork= lambda server, worker: server.log.info(
|
||||||
"worker=%s spawning" % worker.id)
|
"worker=%s spawning" % worker.id)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ class Config(object):
|
|||||||
def before_fork(self, *args):
|
def before_fork(self, *args):
|
||||||
if not callable(self.conf['before_fork']):
|
if not callable(self.conf['before_fork']):
|
||||||
raise RuntimeError("before_fork hook isn't a callable")
|
raise RuntimeError("before_fork hook isn't a callable")
|
||||||
return self.conf['after_fork'](*args)
|
return self.conf['before_fork'](*args)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -42,9 +42,13 @@ class Worker(object):
|
|||||||
self.log = logging.getLogger(__name__)
|
self.log = logging.getLogger(__name__)
|
||||||
self.spinner = 0
|
self.spinner = 0
|
||||||
self.address = self.socket.getsockname()
|
self.address = self.socket.getsockname()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "<Worker %s>" % self.id
|
return "<Worker %s>" % self.id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pid(self):
|
||||||
|
return os.getpid()
|
||||||
|
|
||||||
def init_signals(self):
|
def init_signals(self):
|
||||||
map(lambda s: signal.signal(s, signal.SIG_DFL), self.SIGNALS)
|
map(lambda s: signal.signal(s, signal.SIG_DFL), self.SIGNALS)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user