add after/before fork hooks

This commit is contained in:
Benoit Chesneau 2010-02-16 10:19:15 +01:00
parent 13d9288d69
commit cb0be6d454
3 changed files with 12 additions and 5 deletions

View File

@ -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:

View File

@ -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)

View File

@ -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)