Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit 5158e7d

Browse files
Merge pull request #168 from FynnBe/master
delay keyboard interrupt only if running in main thread
2 parents 4bb6bc3 + 133015b commit 5158e7d

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

inferno/utils/python_utils.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import inspect
66
import os
77

8+
from threading import current_thread, main_thread
9+
810

911
def ensure_dir(directory):
1012
"""ensure the existence of e directory at a given path
@@ -96,17 +98,19 @@ class delayed_keyboard_interrupt(object):
9698
"""
9799
# PEP8: Context manager class in lowercase
98100
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)
102105

103106
def handler(self, sig, frame):
104107
self.signal_received = (sig, frame)
105108

106109
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)
110114

111115

112116
def get_config_for_name(config, name):

0 commit comments

Comments
 (0)