Source code for bibliopixel.util.pid_context

import contextlib, os, tempfile
from . import log

DEFAULT_PID_FILENAME = os.path.join(tempfile.gettempdir(), 'bp_pid_file.txt')
HELP = 'Filename to store the `bp` process ID when running'


[docs]def add_arguments(parser): parser.add_argument( '--pid_filename', default=DEFAULT_PID_FILENAME, help=HELP)
[docs]@contextlib.contextmanager def pid_context(pid_filename=None): """ For the duration of this context manager, put the PID for this process into `pid_filename`, and then remove the file at the end. """ pid_filename = pid_filename or DEFAULT_PID_FILENAME if os.path.exists(pid_filename): contents = open(pid_filename).read(16) log.warning('pid_filename %s already exists with contents %s', pid_filename, contents) with open(pid_filename, 'w') as fp: fp.write(str(os.getpid())) fp.write('\n') try: yield finally: try: os.remove(pid_filename) except Exception as e: log.error('Got an exception %s deleting the pid_filename %s', e, pid_filename)
[docs]def get_pid(pid_filename=None): """ Return the integer PID for the current bp process, or raise an exception if there is no such process or it hasn't registered a PID. """ return int(open(pid_filename or DEFAULT_PID_FILENAME).read(16))