@@ -78,6 +78,7 @@ def __init__(
7878 self .sigint_event = sigint_event
7979 self .disable_terminal_start_stop = disable_terminal_start_stop
8080 self .sigints : List [events .SigIntEvent ] = []
81+ self .wakeup_read_fd : Optional [int ] = None
8182
8283 self .readers : List [int ] = []
8384 self .queued_interrupting_events : List [Union [events .Event , str ]] = []
@@ -110,12 +111,14 @@ def __enter__(self) -> "Input":
110111 self .orig_sigint_handler = signal .getsignal (signal .SIGINT )
111112 signal .signal (signal .SIGINT , self .sigint_handler )
112113
113- self .wakeup_read_fd , wfd = os .pipe ()
114- os .set_blocking (wfd , False )
115- if sys .version_info [0 ] == 3 and 5 <= sys .version_info [1 ] < 7 :
116- signal .set_wakeup_fd (wfd )
117- elif sys .version_info [0 ] == 3 and 7 <= sys .version_info [1 ]:
118- signal .set_wakeup_fd (wfd , warn_on_full_buffer = False )
114+ # Non-main threads don't receive signals
115+ if threading .current_thread () is threading .main_thread ():
116+ self .wakeup_read_fd , wfd = os .pipe ()
117+ os .set_blocking (wfd , False )
118+ if sys .version_info [0 ] == 3 and 5 <= sys .version_info [1 ] < 7 :
119+ signal .set_wakeup_fd (wfd )
120+ elif sys .version_info [0 ] == 3 and 7 <= sys .version_info [1 ]:
121+ signal .set_wakeup_fd (wfd , warn_on_full_buffer = False )
119122
120123 return self
121124
@@ -168,10 +171,8 @@ def _wait_for_read_ready_or_timeout(
168171 while True :
169172 try :
170173 (rs , _ , _ ) = select .select (
171- [
172- self .in_stream .fileno (),
173- self .wakeup_read_fd ,
174- ]
174+ [self .in_stream .fileno ()]
175+ + ([] if self .wakeup_read_fd is None else [self .wakeup_read_fd ])
175176 + self .readers ,
176177 [],
177178 [],
0 commit comments