stagger the daily region grid rebuild across cameras

Every camera requested its region grid at exactly 02:00, so the requests queued up in the dispatcher and held up recording segment inserts behind them. Each camera now picks a random offset of up to an hour.
This commit is contained in:
Josh Hawkins
2026-10-25 11:46:53 -05:00
parent 7738f022e7
commit 22e478cd82
+6 -3
View File
@@ -2,10 +2,11 @@
import logging import logging
import queue import queue
import random
import threading import threading
import time import time
from collections import deque from collections import deque
from datetime import UTC, datetime from datetime import UTC, datetime, timedelta
from multiprocessing import Queue from multiprocessing import Queue
from multiprocessing.synchronize import Event as MpEvent from multiprocessing.synchronize import Event as MpEvent
from typing import Any from typing import Any
@@ -255,7 +256,9 @@ def process_frames(
region_grid: list[list[dict[str, Any]]], region_grid: list[list[dict[str, Any]]],
exit_on_empty: bool = False, exit_on_empty: bool = False,
): ):
next_region_update = get_tomorrow_at_time(2) # cameras share one dispatcher, so stagger the daily grid rebuilds
region_update_offset = timedelta(seconds=random.randrange(3600))
next_region_update = get_tomorrow_at_time(2) + region_update_offset
config_subscriber = CameraConfigUpdateSubscriber( config_subscriber = CameraConfigUpdateSubscriber(
None, None,
{camera_config.name: camera_config}, {camera_config.name: camera_config},
@@ -344,7 +347,7 @@ def process_frames(
if updated_grid: if updated_grid:
region_grid = updated_grid region_grid = updated_grid
next_region_update = get_tomorrow_at_time(2) next_region_update = get_tomorrow_at_time(2) + region_update_offset
try: try:
if exit_on_empty: if exit_on_empty: