|
5 | 5 | import inspect
|
6 | 6 | import os
|
7 | 7 |
|
| 8 | +from threading import current_thread, main_thread |
| 9 | + |
8 | 10 |
|
9 | 11 | def ensure_dir(directory):
|
10 | 12 | """ensure the existence of e directory at a given path
|
@@ -96,17 +98,19 @@ class delayed_keyboard_interrupt(object):
|
96 | 98 | """
|
97 | 99 | # PEP8: Context manager class in lowercase
|
98 | 100 | def __enter__(self):
|
99 |
| - self.signal_received = False |
100 |
| - self.old_handler = signal.getsignal(signal.SIGINT) |
101 |
| - signal.signal(signal.SIGINT, self.handler) |
| 101 | + if current_thread() is main_thread(): |
| 102 | + self.signal_received = False |
| 103 | + self.old_handler = signal.getsignal(signal.SIGINT) |
| 104 | + signal.signal(signal.SIGINT, self.handler) |
102 | 105 |
|
103 | 106 | def handler(self, sig, frame):
|
104 | 107 | self.signal_received = (sig, frame)
|
105 | 108 |
|
106 | 109 | def __exit__(self, type, value, traceback):
|
107 |
| - signal.signal(signal.SIGINT, self.old_handler) |
108 |
| - if self.signal_received: |
109 |
| - self.old_handler(*self.signal_received) |
| 110 | + if current_thread() is main_thread(): |
| 111 | + signal.signal(signal.SIGINT, self.old_handler) |
| 112 | + if self.signal_received: |
| 113 | + self.old_handler(*self.signal_received) |
110 | 114 |
|
111 | 115 |
|
112 | 116 | def get_config_for_name(config, name):
|
|
0 commit comments