@@ -36,16 +36,30 @@ class SignalService:
3636 """Meant for graceful signal handling where the main thread is only used for signal handling.
3737 This should be paired with event loops being run in threads."""
3838
39- def __init__ (self , * , startup : list [StartStopCall ], signal_cbs : list [SignalCallback ], joins : list [StartStopCall ]) -> None :
40- self ._startup : list [StartStopCall ] = startup
41- self ._cbs : list [SignalCallback ] = signal_cbs
42- self ._joins : list [StartStopCall ] = joins
39+ def __init__ (
40+ self ,
41+ ) -> None :
42+ self ._startup : list [StartStopCall ] = []
43+ self ._cbs : list [SignalCallback ] = []
44+ self ._joins : list [StartStopCall ] = []
45+ self .ss , self .cs = socket .socketpair ()
46+ self .ss .setblocking (False )
47+ self .cs .setblocking (False )
48+
49+ def get_send_socket (self ) -> socket .socket :
50+ return self .ss
51+
52+ def add_startup (self , job : StartStopCall ):
53+ self ._startup .append (job )
54+
55+ def add_signal_cb (self , cb : SignalCallback ):
56+ self ._cbs .append (cb )
57+
58+ def add_join (self , join : StartStopCall ):
59+ self ._joins .append (join )
4360
4461 def run (self ):
45- ss , cs = socket .socketpair ()
46- ss .setblocking (False )
47- cs .setblocking (False )
48- signal .set_wakeup_fd (cs .fileno ())
62+ signal .set_wakeup_fd (self .cs .fileno ())
4963
5064 original_handlers : list [_HANDLER ] = []
5165
@@ -58,8 +72,8 @@ def run(self):
5872 for task_start in self ._startup :
5973 task_start ()
6074
61- select .select ([ss ], [], [])
62- data , * _ = ss .recv (4096 )
75+ select .select ([self . ss ], [], [])
76+ data , * _ = self . ss .recv (4096 )
6377
6478 for cb in self ._cbs :
6579 cb (signal .Signals (data ))
0 commit comments