log : changed semantic for start / join (now it's explicit)
This commit is contained in:
parent
7cedd620f1
commit
90b131260b
1 changed files with 13 additions and 2 deletions
|
@ -131,8 +131,16 @@ def __init__(self, filename, echo=False, force_color=False, debug=False):
|
||||||
# Spawn a daemon that writes what it reads from a pipe
|
# Spawn a daemon that writes what it reads from a pipe
|
||||||
self.p = multiprocessing.Process(target=self._forward_redirected_pipe, args=(self.read,), name='logger_daemon')
|
self.p = multiprocessing.Process(target=self._forward_redirected_pipe, args=(self.read,), name='logger_daemon')
|
||||||
self.p.daemon = True
|
self.p.daemon = True
|
||||||
|
# I just need this to communicate to un-summon the daemon
|
||||||
|
self.parent_pipe, self.child_pipe = multiprocessing.Pipe()
|
||||||
|
|
||||||
|
def acquire(self):
|
||||||
self.p.start()
|
self.p.start()
|
||||||
|
|
||||||
|
def release(self):
|
||||||
|
self.parent_pipe.send(True)
|
||||||
|
self.p.join(60.0) # 1 minute to join the child
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
"""Redirect output from the with block to a file.
|
"""Redirect output from the with block to a file.
|
||||||
|
|
||||||
|
@ -165,6 +173,7 @@ def _forward_redirected_pipe(self, read):
|
||||||
if read_file in rlist:
|
if read_file in rlist:
|
||||||
line = read_file.readline()
|
line = read_file.readline()
|
||||||
if not line:
|
if not line:
|
||||||
|
# For some reason we never reach this point...
|
||||||
break
|
break
|
||||||
|
|
||||||
# Echo to stdout if requested.
|
# Echo to stdout if requested.
|
||||||
|
@ -175,6 +184,9 @@ def _forward_redirected_pipe(self, read):
|
||||||
log_file.write(_strip(line))
|
log_file.write(_strip(line))
|
||||||
log_file.flush()
|
log_file.flush()
|
||||||
|
|
||||||
|
if self.child_pipe.poll():
|
||||||
|
break
|
||||||
|
|
||||||
def _redirect_to_pipe(self, write):
|
def _redirect_to_pipe(self, write):
|
||||||
try:
|
try:
|
||||||
# Save old stdout and stderr
|
# Save old stdout and stderr
|
||||||
|
@ -216,7 +228,6 @@ def __exit__(self, exc_type, exception, traceback):
|
||||||
tty._debug = self._debug
|
tty._debug = self._debug
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
"""Closes the pipes and joins the daemon"""
|
"""Closes the pipes"""
|
||||||
os.close(self.write)
|
os.close(self.write)
|
||||||
self.p.join(60.0) # 1 minute to join the daemonic child
|
|
||||||
os.close(self.read)
|
os.close(self.read)
|
||||||
|
|
Loading…
Reference in a new issue