|
@@ -1,5 +1,5 @@
|
1
|
1
|
# -*- coding: utf-8 -*-
|
2
|
|
-
|
|
2
|
+import os
|
3
|
3
|
import time
|
4
|
4
|
import signal
|
5
|
5
|
|
|
@@ -49,23 +49,15 @@ def NotImplemented():
|
49
|
49
|
raise NotImplementedError()
|
50
|
50
|
|
51
|
51
|
|
52
|
|
-def add_signal_handler(signal_id, handler, execute_before=True) -> None:
|
|
52
|
+def add_signal_handler(signal_id, handler) -> None:
|
53
|
53
|
"""
|
54
|
54
|
Add a callback attached to python signal.
|
55
|
55
|
:param signal_id: signal identifier (eg. signal.SIGTERM)
|
56
|
56
|
:param handler: callback to execute when signal trig
|
57
|
|
- :param execute_before: If True, callback is executed before eventual
|
58
|
|
- existing callback on given dignal id.
|
59
|
57
|
"""
|
60
|
|
- previous_handler = signal.getsignal(signal_id)
|
61
|
|
-
|
62
|
|
- def call_callback(*args, **kwargs):
|
63
|
|
- if not execute_before and callable(previous_handler):
|
64
|
|
- previous_handler(*args, **kwargs)
|
65
|
|
-
|
66
|
|
- handler(*args, **kwargs)
|
67
|
|
-
|
68
|
|
- if execute_before and callable(previous_handler):
|
69
|
|
- previous_handler(*args, **kwargs)
|
|
58
|
+ def _handler(*args, **kwargs):
|
|
59
|
+ handler()
|
|
60
|
+ signal.signal(signal_id, signal.SIG_DFL)
|
|
61
|
+ os.kill(os.getpid(), signal_id) # Rethrow signal
|
70
|
62
|
|
71
|
|
- signal.signal(signal_id, call_callback)
|
|
63
|
+ signal.signal(signal_id, _handler)
|