added signal (SIGINT) handler for gracefully exit

This commit is contained in:
2026-03-17 19:33:19 +01:00
parent eaec8d8691
commit 4a3758d5f1
+24 -5
View File
@@ -1,6 +1,7 @@
import socket import socket
import selectors import selectors
import time import time
import signal, os
from msg_container import MsgContainer from msg_container import MsgContainer
from receiver.nmea_packetizer import NmeaPacketizer from receiver.nmea_packetizer import NmeaPacketizer
@@ -34,8 +35,9 @@ class NetworkBackend(ABackend):
self.thread.start() self.thread.start()
def stop(self): def stop(self):
self.loop_enable = False if self.loop_enable:
self.thread.join() self.loop_enable = False
self.thread.join()
def create_xcvr(self, name: str) -> Transceiver: def create_xcvr(self, name: str) -> Transceiver:
obj = Transceiver(self, name) obj = Transceiver(self, name)
@@ -113,6 +115,12 @@ class NetworkBackend(ABackend):
finally: finally:
self.sel.close() self.sel.close()
def handler(signum, frame, be: NetworkBackend):
sig_name = signal.Signals(signum).name
print(f'Signal handler called with signal {sig_name} ({signum})')
be.stop()
be.disconnect()
if __name__ == "__main__": if __name__ == "__main__":
server_list = [ server_list = [
{'name': " neo-f9p", 'host': "192.168.22.93", 'port': 8721}, {'name': " neo-f9p", 'host': "192.168.22.93", 'port': 8721},
@@ -120,8 +128,13 @@ if __name__ == "__main__":
] ]
transceiver = {} transceiver = {}
# TCPIP multi source receiver # TCPIP multi source receiver
mc = NetworkBackend(server_list) mc = NetworkBackend(server_list)
# Set the signal handler
signal.signal(signal.SIGINT, lambda signum, frame: handler(signum, frame, mc))
for grm in [" neo-f9p", "zed-x20p"]: for grm in [" neo-f9p", "zed-x20p"]:
nmea_rx_list = [ nmea_rx_list = [
Gll(grm, 'GN'), Gll(grm, 'GN'),
@@ -170,9 +183,13 @@ if __name__ == "__main__":
# Start thread # Start thread
mc.start() mc.start()
for n in range(10): while True:
for grm in [" neo-f9p", "zed-x20p"]: try:
transceiver[grm].send(b'Hallo') for grm in [" neo-f9p", "zed-x20p"]:
transceiver[grm].send(b'Hallo')
except ValueError:
break
time.sleep(1) time.sleep(1)
# Stop thread # Stop thread
@@ -180,3 +197,5 @@ if __name__ == "__main__":
# code never reached # code never reached
mc.disconnect() mc.disconnect()