added signal (SIGINT) handler for gracefully exit
This commit is contained in:
+24
-5
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user