Skip to content

Instantly share code, notes, and snippets.

@bwbaugh
Forked from nonZero/graceful_int_handler.py
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bwbaugh/2f873fd44d4a572226e3 to your computer and use it in GitHub Desktop.
Save bwbaugh/2f873fd44d4a572226e3 to your computer and use it in GitHub Desktop.
class InterruptableRegion(object):
def __init__(self, signum_list=None):
if signum_list is None:
signum_list = [signal.SIGINT]
self.signum_list = signum_list
self.reset()
def __enter__(self):
self.reset()
def handler(signum, frame):
self.release()
self.interrupted = True
for signum in self.signum_list:
self.original_handler_map[signum] = signal.signal(signum, handler)
return self
def __exit__(self, type, value, tb):
self.release()
def reset(self):
self.interrupted = False
self.released = False
self.original_handler_map = {}
def release(self):
if self.released:
return
for signum, handler in self.original_handler_map.items():
signal.signal(signum, handler)
self.released = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment