80
80
logger .debug ("Using Python %s" % sys .version )
81
81
82
82
83
+ def wait_for_empty_queue (timeout : int = 5 ):
84
+ # Waiting for all pending request to be sent to display
85
+ logger .info ("Waiting for all pending request to be sent to display (%ds max)..." % timeout )
86
+
87
+ wait_time = 0
88
+ while not scheduler .is_queue_empty () and wait_time < timeout :
89
+ time .sleep (0.1 )
90
+ wait_time = wait_time + 0.1
91
+
92
+ logger .debug ("(Waited %.1fs)" % wait_time )
93
+
83
94
def clean_stop (tray_icon = None ):
84
95
# Turn screen and LEDs off before stopping
85
96
display .turn_off ()
@@ -88,15 +99,8 @@ def clean_stop(tray_icon=None):
88
99
# Instead, ask the scheduler to empty the action queue before stopping
89
100
scheduler .STOPPING = True
90
101
91
- # Allow 5 seconds max. delay in case scheduler is not responding
92
- wait_time = 5
93
- logger .info ("Waiting for all pending request to be sent to display (%ds max)..." % wait_time )
94
-
95
- while not scheduler .is_queue_empty () and wait_time > 0 :
96
- time .sleep (0.1 )
97
- wait_time = wait_time - 0.1
98
-
99
- logger .debug ("(%.1fs)" % (5 - wait_time ))
102
+ # Waiting for all pending request to be sent to display
103
+ wait_for_empty_queue (5 )
100
104
101
105
# Remove tray icon just before exit
102
106
if tray_icon :
@@ -194,34 +198,42 @@ def on_win32_wm_event(hWnd, msg, wParam, lParam):
194
198
win32api .SetConsoleCtrlHandler (on_win32_ctrl_event , True )
195
199
196
200
# Initialize the display
201
+ logger .info ("Initialize display" )
197
202
display .initialize_display ()
198
203
204
+ # Start serial queue handler
205
+ scheduler .QueueHandler ()
206
+
199
207
# Create all static images
200
208
display .display_static_images ()
201
209
202
210
# Create all static texts
203
211
display .display_static_text ()
204
212
205
- # Run our jobs that update data
213
+ # Wait for static images/text to be displayed before starting monitoring (to avoid filling the queue while waiting)
214
+ wait_for_empty_queue (10 )
215
+
216
+ # Start sensor scheduled reading. Avoid starting them all at the same time to optimize load
217
+ logger .info ("Starting system monitoring" )
206
218
import library .stats as stats
207
219
208
- scheduler .CPUPercentage ()
209
- scheduler .CPUFrequency ()
210
- scheduler .CPULoad ()
211
- scheduler .CPUTemperature ()
212
- scheduler .CPUFanSpeed ()
220
+ scheduler .CPUPercentage (); time . sleep ( 0.25 )
221
+ scheduler .CPUFrequency (); time . sleep ( 0.25 )
222
+ scheduler .CPULoad (); time . sleep ( 0.25 )
223
+ scheduler .CPUTemperature (); time . sleep ( 0.25 )
224
+ scheduler .CPUFanSpeed (); time . sleep ( 0.25 )
213
225
if stats .Gpu .is_available ():
214
- scheduler .GpuStats ()
215
- scheduler .MemoryStats ()
216
- scheduler .DiskStats ()
217
- scheduler .NetStats ()
218
- scheduler .DateStats ()
219
- scheduler .SystemUptimeStats ()
220
- scheduler .CustomStats ()
221
- scheduler .WeatherStats ()
222
- scheduler .PingStats ()
223
- scheduler . QueueHandler ()
224
-
226
+ scheduler .GpuStats (); time . sleep ( 0.25 )
227
+ scheduler .MemoryStats (); time . sleep ( 0.25 )
228
+ scheduler .DiskStats (); time . sleep ( 0.25 )
229
+ scheduler .NetStats (); time . sleep ( 0.25 )
230
+ scheduler .DateStats (); time . sleep ( 0.25 )
231
+ scheduler .SystemUptimeStats (); time . sleep ( 0.25 )
232
+ scheduler .CustomStats (); time . sleep ( 0.25 )
233
+ scheduler .WeatherStats (); time . sleep ( 0.25 )
234
+ scheduler .PingStats (); time . sleep ( 0.25 )
235
+
236
+ # OS-specific tasks
225
237
if tray_icon and platform .system () == "Darwin" : # macOS-specific
226
238
from AppKit import NSBundle , NSApp , NSApplicationActivationPolicyProhibited
227
239
0 commit comments