mirror of
https://github.com/JoelBender/bacpypes
synced 2025-09-28 22:15:23 +08:00
add sigterm and sigusr1 parameters to run, move the stop() and print_stack() functions up, remove code attaching signal handlers at import time
This commit is contained in:
parent
665ee4be99
commit
d7d096ec47
|
@ -29,10 +29,16 @@ sleeptime = 0.0
|
|||
|
||||
SPIN = 1.0
|
||||
|
||||
def run(spin=SPIN):
|
||||
if _debug: run._debug("run spin=%r", spin)
|
||||
def run(spin=SPIN, sigterm=stop, sigusr1=print_stack):
|
||||
if _debug: run._debug("run spin=%r sigterm=%r, sigusr1=%r", spin, sigterm, sigusr1)
|
||||
global running, taskManager, deferredFns, sleeptime
|
||||
|
||||
# install the signal handlers if they have been provided (issue #112)
|
||||
if (sigterm is not None) and hasattr(signal, 'SIGTERM'):
|
||||
signal.signal(signal.SIGTERM, sigterm)
|
||||
if (sigusr1 is not None) and hasattr(signal, 'SIGUSR1'):
|
||||
signal.signal(signal.SIGUSR1, sigusr1)
|
||||
|
||||
# reference the task manager (a singleton)
|
||||
taskManager = TaskManager()
|
||||
|
||||
|
@ -165,10 +171,6 @@ def stop(*args):
|
|||
|
||||
bacpypes_debugging(stop)
|
||||
|
||||
# set a TERM signal handler
|
||||
if hasattr(signal, 'SIGTERM'):
|
||||
signal.signal(signal.SIGTERM, stop)
|
||||
|
||||
#
|
||||
# print_stack
|
||||
#
|
||||
|
@ -206,10 +208,6 @@ def print_stack(sig, frame):
|
|||
|
||||
bacpypes_debugging(print_stack)
|
||||
|
||||
# set a USR1 signal handler to print a stack trace
|
||||
if hasattr(signal, 'SIGUSR1'):
|
||||
signal.signal(signal.SIGUSR1, print_stack)
|
||||
|
||||
#
|
||||
# deferred
|
||||
#
|
||||
|
@ -242,3 +240,4 @@ def enable_sleeping(stime=0.001):
|
|||
sleeptime = stime
|
||||
|
||||
bacpypes_debugging(enable_sleeping)
|
||||
|
||||
|
|
|
@ -23,6 +23,64 @@ taskManager = None
|
|||
deferredFns = []
|
||||
sleeptime = 0.0
|
||||
|
||||
#
|
||||
# stop
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def stop(*args):
|
||||
"""Call to stop running, may be called with a signum and frame
|
||||
parameter if called as a signal handler."""
|
||||
if _debug: stop._debug("stop")
|
||||
global running, taskManager
|
||||
|
||||
if args:
|
||||
sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
sys.stderr.flush()
|
||||
|
||||
running = False
|
||||
|
||||
# trigger the task manager event
|
||||
if taskManager and taskManager.trigger:
|
||||
if _debug: stop._debug(" - trigger")
|
||||
taskManager.trigger.set()
|
||||
|
||||
#
|
||||
# print_stack
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def print_stack(sig, frame):
|
||||
"""Signal handler to print a stack trace and some interesting values."""
|
||||
if _debug: print_stack._debug("print_stack, %r, %r", sig, frame)
|
||||
global running, deferredFns, sleeptime
|
||||
|
||||
sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
|
||||
sys.stderr.write("---------- globals\n")
|
||||
sys.stderr.write(" running: %r\n" % (running,))
|
||||
sys.stderr.write(" deferredFns: %r\n" % (deferredFns,))
|
||||
sys.stderr.write(" sleeptime: %r\n" % (sleeptime,))
|
||||
|
||||
sys.stderr.write("---------- stack\n")
|
||||
traceback.print_stack(frame)
|
||||
|
||||
# make a list of interesting frames
|
||||
flist = []
|
||||
f = frame
|
||||
while f.f_back:
|
||||
flist.append(f)
|
||||
f = f.f_back
|
||||
|
||||
# reverse the list so it is in the same order as print_stack
|
||||
flist.reverse()
|
||||
for f in flist:
|
||||
sys.stderr.write("---------- frame: %s\n" % (f,))
|
||||
for k, v in f.f_locals.items():
|
||||
sys.stderr.write(" %s: %r\n" % (k, v))
|
||||
|
||||
sys.stderr.flush()
|
||||
|
||||
#
|
||||
# run
|
||||
#
|
||||
|
@ -30,10 +88,16 @@ sleeptime = 0.0
|
|||
SPIN = 1.0
|
||||
|
||||
@bacpypes_debugging
|
||||
def run(spin=SPIN):
|
||||
if _debug: run._debug("run spin=%r", spin)
|
||||
def run(spin=SPIN, sigterm=stop, sigusr1=print_stack):
|
||||
if _debug: run._debug("run spin=%r sigterm=%r, sigusr1=%r", spin, sigterm, sigusr1)
|
||||
global running, taskManager, deferredFns, sleeptime
|
||||
|
||||
# install the signal handlers if they have been provided (issue #112)
|
||||
if (sigterm is not None) and hasattr(signal, 'SIGTERM'):
|
||||
signal.signal(signal.SIGTERM, sigterm)
|
||||
if (sigusr1 is not None) and hasattr(signal, 'SIGUSR1'):
|
||||
signal.signal(signal.SIGUSR1, sigusr1)
|
||||
|
||||
# reference the task manager (a singleton)
|
||||
taskManager = TaskManager()
|
||||
|
||||
|
@ -140,72 +204,6 @@ def run_once():
|
|||
except Exception as err:
|
||||
if _debug: run_once._exception("an error has occurred: %s", err)
|
||||
|
||||
#
|
||||
# stop
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def stop(*args):
|
||||
"""Call to stop running, may be called with a signum and frame
|
||||
parameter if called as a signal handler."""
|
||||
if _debug: stop._debug("stop")
|
||||
global running, taskManager
|
||||
|
||||
if args:
|
||||
sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
sys.stderr.flush()
|
||||
|
||||
running = False
|
||||
|
||||
# trigger the task manager event
|
||||
if taskManager and taskManager.trigger:
|
||||
if _debug: stop._debug(" - trigger")
|
||||
taskManager.trigger.set()
|
||||
|
||||
# set a TERM signal handler
|
||||
if hasattr(signal, 'SIGTERM'):
|
||||
signal.signal(signal.SIGTERM, stop)
|
||||
|
||||
#
|
||||
# print_stack
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def print_stack(sig, frame):
|
||||
"""Signal handler to print a stack trace and some interesting values."""
|
||||
if _debug: print_stack._debug("print_stack, %r, %r", sig, frame)
|
||||
global running, deferredFns, sleeptime
|
||||
|
||||
sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
|
||||
sys.stderr.write("---------- globals\n")
|
||||
sys.stderr.write(" running: %r\n" % (running,))
|
||||
sys.stderr.write(" deferredFns: %r\n" % (deferredFns,))
|
||||
sys.stderr.write(" sleeptime: %r\n" % (sleeptime,))
|
||||
|
||||
sys.stderr.write("---------- stack\n")
|
||||
traceback.print_stack(frame)
|
||||
|
||||
# make a list of interesting frames
|
||||
flist = []
|
||||
f = frame
|
||||
while f.f_back:
|
||||
flist.append(f)
|
||||
f = f.f_back
|
||||
|
||||
# reverse the list so it is in the same order as print_stack
|
||||
flist.reverse()
|
||||
for f in flist:
|
||||
sys.stderr.write("---------- frame: %s\n" % (f,))
|
||||
for k, v in f.f_locals.items():
|
||||
sys.stderr.write(" %s: %r\n" % (k, v))
|
||||
|
||||
sys.stderr.flush()
|
||||
|
||||
# set a USR1 signal handler to print a stack trace
|
||||
if hasattr(signal, 'SIGUSR1'):
|
||||
signal.signal(signal.SIGUSR1, print_stack)
|
||||
|
||||
#
|
||||
# deferred
|
||||
#
|
||||
|
@ -237,3 +235,4 @@ def enable_sleeping(stime=0.001):
|
|||
|
||||
# set the sleep time
|
||||
sleeptime = stime
|
||||
|
||||
|
|
|
@ -23,6 +23,64 @@ taskManager = None
|
|||
deferredFns = []
|
||||
sleeptime = 0.0
|
||||
|
||||
#
|
||||
# stop
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def stop(*args):
|
||||
"""Call to stop running, may be called with a signum and frame
|
||||
parameter if called as a signal handler."""
|
||||
if _debug: stop._debug("stop")
|
||||
global running, taskManager
|
||||
|
||||
if args:
|
||||
sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
sys.stderr.flush()
|
||||
|
||||
running = False
|
||||
|
||||
# trigger the task manager event
|
||||
if taskManager and taskManager.trigger:
|
||||
if _debug: stop._debug(" - trigger")
|
||||
taskManager.trigger.set()
|
||||
|
||||
#
|
||||
# print_stack
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def print_stack(sig, frame):
|
||||
"""Signal handler to print a stack trace and some interesting values."""
|
||||
if _debug: print_stack._debug("print_stack, %r, %r", sig, frame)
|
||||
global running, deferredFns, sleeptime
|
||||
|
||||
sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
|
||||
sys.stderr.write("---------- globals\n")
|
||||
sys.stderr.write(" running: %r\n" % (running,))
|
||||
sys.stderr.write(" deferredFns: %r\n" % (deferredFns,))
|
||||
sys.stderr.write(" sleeptime: %r\n" % (sleeptime,))
|
||||
|
||||
sys.stderr.write("---------- stack\n")
|
||||
traceback.print_stack(frame)
|
||||
|
||||
# make a list of interesting frames
|
||||
flist = []
|
||||
f = frame
|
||||
while f.f_back:
|
||||
flist.append(f)
|
||||
f = f.f_back
|
||||
|
||||
# reverse the list so it is in the same order as print_stack
|
||||
flist.reverse()
|
||||
for f in flist:
|
||||
sys.stderr.write("---------- frame: %s\n" % (f,))
|
||||
for k, v in f.f_locals.items():
|
||||
sys.stderr.write(" %s: %r\n" % (k, v))
|
||||
|
||||
sys.stderr.flush()
|
||||
|
||||
#
|
||||
# run
|
||||
#
|
||||
|
@ -30,10 +88,16 @@ sleeptime = 0.0
|
|||
SPIN = 1.0
|
||||
|
||||
@bacpypes_debugging
|
||||
def run(spin=SPIN):
|
||||
if _debug: run._debug("run spin=%r", spin)
|
||||
def run(spin=SPIN, sigterm=stop, sigusr1=print_stack):
|
||||
if _debug: run._debug("run spin=%r sigterm=%r, sigusr1=%r", spin, sigterm, sigusr1)
|
||||
global running, taskManager, deferredFns, sleeptime
|
||||
|
||||
# install the signal handlers if they have been provided (issue #112)
|
||||
if (sigterm is not None) and hasattr(signal, 'SIGTERM'):
|
||||
signal.signal(signal.SIGTERM, sigterm)
|
||||
if (sigusr1 is not None) and hasattr(signal, 'SIGUSR1'):
|
||||
signal.signal(signal.SIGUSR1, sigusr1)
|
||||
|
||||
# reference the task manager (a singleton)
|
||||
taskManager = TaskManager()
|
||||
|
||||
|
@ -140,72 +204,6 @@ def run_once():
|
|||
except Exception as err:
|
||||
if _debug: run_once._exception("an error has occurred: %s", err)
|
||||
|
||||
#
|
||||
# stop
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def stop(*args):
|
||||
"""Call to stop running, may be called with a signum and frame
|
||||
parameter if called as a signal handler."""
|
||||
if _debug: stop._debug("stop")
|
||||
global running, taskManager
|
||||
|
||||
if args:
|
||||
sys.stderr.write("===== TERM Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
sys.stderr.flush()
|
||||
|
||||
running = False
|
||||
|
||||
# trigger the task manager event
|
||||
if taskManager and taskManager.trigger:
|
||||
if _debug: stop._debug(" - trigger")
|
||||
taskManager.trigger.set()
|
||||
|
||||
# set a TERM signal handler
|
||||
if hasattr(signal, 'SIGTERM'):
|
||||
signal.signal(signal.SIGTERM, stop)
|
||||
|
||||
#
|
||||
# print_stack
|
||||
#
|
||||
|
||||
@bacpypes_debugging
|
||||
def print_stack(sig, frame):
|
||||
"""Signal handler to print a stack trace and some interesting values."""
|
||||
if _debug: print_stack._debug("print_stack, %r, %r", sig, frame)
|
||||
global running, deferredFns, sleeptime
|
||||
|
||||
sys.stderr.write("==== USR1 Signal, %s\n" % time.strftime("%d-%b-%Y %H:%M:%S"))
|
||||
|
||||
sys.stderr.write("---------- globals\n")
|
||||
sys.stderr.write(" running: %r\n" % (running,))
|
||||
sys.stderr.write(" deferredFns: %r\n" % (deferredFns,))
|
||||
sys.stderr.write(" sleeptime: %r\n" % (sleeptime,))
|
||||
|
||||
sys.stderr.write("---------- stack\n")
|
||||
traceback.print_stack(frame)
|
||||
|
||||
# make a list of interesting frames
|
||||
flist = []
|
||||
f = frame
|
||||
while f.f_back:
|
||||
flist.append(f)
|
||||
f = f.f_back
|
||||
|
||||
# reverse the list so it is in the same order as print_stack
|
||||
flist.reverse()
|
||||
for f in flist:
|
||||
sys.stderr.write("---------- frame: %s\n" % (f,))
|
||||
for k, v in f.f_locals.items():
|
||||
sys.stderr.write(" %s: %r\n" % (k, v))
|
||||
|
||||
sys.stderr.flush()
|
||||
|
||||
# set a USR1 signal handler to print a stack trace
|
||||
if hasattr(signal, 'SIGUSR1'):
|
||||
signal.signal(signal.SIGUSR1, print_stack)
|
||||
|
||||
#
|
||||
# deferred
|
||||
#
|
||||
|
@ -237,3 +235,4 @@ def enable_sleeping(stime=0.001):
|
|||
|
||||
# set the sleep time
|
||||
sleeptime = stime
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user