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.log = logging.getLogger(__name__)
|
||||
self.opts = kwargs
|
||||
self.conf = kwargs.get("config", {})
|
||||
self._pidfile = None
|
||||
self.master_name = "Master"
|
||||
|
||||
@ -324,6 +325,7 @@ class Arbiter(object):
|
||||
|
||||
worker = Worker(i, self.pid, self.LISTENER, self.modname,
|
||||
self.timeout/2.0, self.debug)
|
||||
self.conf.before_fork(self, worker)
|
||||
pid = os.fork()
|
||||
if pid != 0:
|
||||
self.WORKERS[pid] = worker
|
||||
@ -333,6 +335,7 @@ class Arbiter(object):
|
||||
worker_pid = os.getpid()
|
||||
try:
|
||||
self.log.info("Worker %s booting" % worker_pid)
|
||||
self.conf.after_fork(self, worker)
|
||||
worker.run()
|
||||
sys.exit(0)
|
||||
except SystemExit:
|
||||
|
||||
@ -22,10 +22,10 @@ class Config(object):
|
||||
user=None,
|
||||
group=None,
|
||||
|
||||
after_fork= lambda server, worker: server.logger.info(
|
||||
"worker=%s spawned pid=%s}" % (worker.id, worker.pid)),
|
||||
after_fork= lambda server, worker: server.log.info(
|
||||
"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)
|
||||
)
|
||||
|
||||
@ -110,7 +110,7 @@ class Config(object):
|
||||
def before_fork(self, *args):
|
||||
if not callable(self.conf['before_fork']):
|
||||
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.spinner = 0
|
||||
self.address = self.socket.getsockname()
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return "<Worker %s>" % self.id
|
||||
|
||||
@property
|
||||
def pid(self):
|
||||
return os.getpid()
|
||||
|
||||
def init_signals(self):
|
||||
map(lambda s: signal.signal(s, signal.SIG_DFL), self.SIGNALS)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user