Skip to content

Commit 99a336f

Browse files
fixed crash on end of program
1 parent 271cdc9 commit 99a336f

3 files changed

Lines changed: 25 additions & 29 deletions

File tree

DeviceManager/gui/run_gui.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,12 @@ def __init__(self, args: list = None):
4747
self.temp_sensor_2 = TemperatureSensor(TEMP_2_TOKEN, self._sched)
4848
self.temp_sensor_3 = TemperatureSensor(TEMP_3_TOKEN, self._sched)
4949

50-
def exec(self):
51-
"""
52-
Start the scheduler, execute the application and then join threads and shutdown the scheduler.
53-
"""
54-
5550
self._sched.start()
5651

57-
super().exec()
58-
52+
def stop_all(self):
53+
"""
54+
Stop all threads and shutdown the scheduler.
55+
"""
5956
self.light_1.stopThread()
6057
self.light_2.stopThread()
6158
self.light_3.stopThread()
@@ -114,4 +111,6 @@ def run_gui(args: list = None):
114111

115112
# EXEC APP
116113
# ///////////////////////////////////////////////////////////////
117-
sys.exit(app.exec())
114+
app.exec()
115+
app.stop_all()
116+
sys.exit(0)

DeviceManager/light_mqtt.py

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import threading
55

66
import paho.mqtt.client as mqtt
7-
from apscheduler.schedulers import SchedulerAlreadyRunningError
8-
from apscheduler.schedulers.background import BackgroundScheduler
97
from apscheduler.triggers.interval import IntervalTrigger
8+
from apscheduler.schedulers.background import BackgroundScheduler
109

1110
from .devices import LightSensor
1211
from .config import THINGSBOARD_URL
@@ -35,19 +34,16 @@ def __init__(self, topicSend, topicRecived, access_token):
3534
self.topicRecived = topicRecived
3635
self.accessToken = access_token
3736
self.scheduler: BackgroundScheduler = BackgroundScheduler()
37+
self.job = self.scheduler.add_job(
38+
self.send, trigger=IntervalTrigger(seconds=LightMqtt._socketTimes)
39+
)
3840
self.light = LightSensor()
3941
self.client = mqtt.Client()
4042
self.client.username_pw_set(username=self.accessToken)
4143
self.thread = threading.Thread(target=self.start)
44+
self.scheduler.start()
4245
self.thread.start()
4346

44-
def __del__(self):
45-
"""
46-
Stop the thread.
47-
"""
48-
print("\n\n\n\nIN DEL\n\n\n\n")
49-
self.stopThread()
50-
5147
def send(self):
5248
"""
5349
Using MQTT send data on topicSend and telemetry topic.
@@ -96,19 +92,12 @@ def start(self):
9692
self.client.connect(LightMqtt._ip, LightMqtt._port, 60)
9793
self.client.subscribe(self.topicRecived)
9894
self.client.on_message = self.receiver()
99-
self.job = self.scheduler.add_job(
100-
self.send, trigger=IntervalTrigger(seconds=LightMqtt._socketTimes)
101-
)
102-
try:
103-
self.scheduler.start()
104-
except SchedulerAlreadyRunningError:
105-
pass
10695
self.client.loop_forever()
10796

10897
def stopThread(self):
10998
"""
11099
Stop all background processes.
111100
"""
112-
self.scheduler.remove_all_jobs()
101+
self.scheduler.shutdown(wait=True)
113102
self.client.disconnect()
114103
self.thread.join()

DeviceManager/protocols/coap.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ def get(self, route, callback=None, timeout=None) -> Message:
3434
3535
Returns a `Message` instance containing the response.
3636
"""
37-
return self._client.get(route, callback=callback, timeout=timeout)
37+
res = self._client.get(route, callback=callback, timeout=timeout)
38+
self._client.stop()
39+
return res
3840

3941
def put(self, route, payload, callback=None, timeout=None) -> Message:
4042
"""
@@ -48,9 +50,11 @@ def put(self, route, payload, callback=None, timeout=None) -> Message:
4850
4951
Returns a `Message` instance containing the response.
5052
"""
51-
return self._client.put(
53+
res = self._client.put(
5254
route, payload, callback=callback, timeout=timeout, **self._ct
5355
)
56+
self._client.stop()
57+
return res
5458

5559
def post(self, access_token, payload, callback=None, timeout=None) -> Message:
5660
"""
@@ -64,13 +68,15 @@ def post(self, access_token, payload, callback=None, timeout=None) -> Message:
6468
6569
Returns a `Message` instance containing the response.
6670
"""
67-
return self._client.post(
71+
res = self._client.post(
6872
self.route_post.format(access_token=access_token),
6973
payload,
7074
callback=callback,
7175
timeout=timeout,
7276
**self._ct
7377
)
78+
self._client.stop()
79+
return res
7480

7581
def delete(self, route, payload, callback=None, timeout=None) -> Message:
7682
"""
@@ -84,6 +90,8 @@ def delete(self, route, payload, callback=None, timeout=None) -> Message:
8490
8591
Returns a `Message` instance containing the response.
8692
"""
87-
return self._client.delete(
93+
res = self._client.delete(
8894
route, payload, callback=callback, timeout=timeout, **self._ct
8995
)
96+
self._client.stop()
97+
return res

0 commit comments

Comments
 (0)