Total Complexity | 6 |
Total Lines | 25 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | #!/usr/bin/env python |
||
6 | class SignalHandler: |
||
7 | def __init__(self, callback, what=signal.SIGUSR2): |
||
8 | self.callback = callback |
||
9 | self.received = False |
||
10 | self.working = False |
||
11 | signal.signal(what, self.on_signal) |
||
12 | |||
13 | def on_signal(self, signal, frame): |
||
14 | self.received = True |
||
15 | if not self.working: |
||
16 | self.run_callback() |
||
17 | |||
18 | def run_callback(self): |
||
19 | self.received = False |
||
20 | self.callback() |
||
21 | |||
22 | @contextmanager |
||
23 | def block_signals(self): |
||
24 | self.working = True |
||
25 | try: |
||
26 | yield |
||
27 | finally: |
||
28 | self.working = False |
||
29 | if self.received: |
||
30 | self.run_callback() |
||
31 | |||
32 |