mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-15 15:45:27 +03:00
Remove Process types from metrics to allow pickling
This commit is contained in:
parent
e1796e1edf
commit
e10b330b04
@ -592,19 +592,17 @@ class FrigateApp:
|
|||||||
|
|
||||||
# ensure the capture processes are done
|
# ensure the capture processes are done
|
||||||
for name, camera in self.cameras.items():
|
for name, camera in self.cameras.items():
|
||||||
capture_process = camera.camera_metrics.capture_process
|
if camera.capture_process is not None:
|
||||||
if capture_process is not None:
|
|
||||||
logger.info(f"Waiting for capture process for {name} to stop")
|
logger.info(f"Waiting for capture process for {name} to stop")
|
||||||
capture_process.terminate()
|
camera.capture_process.terminate()
|
||||||
capture_process.join()
|
camera.capture_process.join()
|
||||||
|
|
||||||
# ensure the camera processors are done
|
# ensure the camera processors are done
|
||||||
for name, camera in self.cameras.items():
|
for name, camera in self.cameras.items():
|
||||||
camera_process = camera.camera_metrics.process
|
if camera.process is not None:
|
||||||
if camera_process is not None:
|
|
||||||
logger.info(f"Waiting for process for {name} to stop")
|
logger.info(f"Waiting for process for {name} to stop")
|
||||||
camera_process.terminate()
|
camera.process.terminate()
|
||||||
camera_process.join()
|
camera.process.join()
|
||||||
logger.info(f"Closing frame queue for {name}")
|
logger.info(f"Closing frame queue for {name}")
|
||||||
empty_and_close_queue(camera.camera_metrics.frame_queue)
|
empty_and_close_queue(camera.camera_metrics.frame_queue)
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import multiprocessing as mp
|
import multiprocessing as mp
|
||||||
from multiprocessing.synchronize import Event
|
from multiprocessing.synchronize import Event
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from frigate import util
|
from frigate import util
|
||||||
from frigate.config import FrigateConfig
|
from frigate.config import FrigateConfig
|
||||||
@ -22,6 +23,9 @@ class Camera:
|
|||||||
camera_metrics: CameraMetrics
|
camera_metrics: CameraMetrics
|
||||||
ptz_metrics: PTZMetrics
|
ptz_metrics: PTZMetrics
|
||||||
|
|
||||||
|
process: Optional[util.Process]
|
||||||
|
capture_process: Optional[util.Process]
|
||||||
|
|
||||||
def __init__(self, name: str, config: FrigateConfig):
|
def __init__(self, name: str, config: FrigateConfig):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.config = config
|
self.config = config
|
||||||
@ -57,7 +61,8 @@ class Camera:
|
|||||||
),
|
),
|
||||||
daemon=True,
|
daemon=True,
|
||||||
)
|
)
|
||||||
self.camera_metrics.process = camera_process
|
self.process = camera_process
|
||||||
|
self.camera_metrics.process_pid.value = camera_process.pid or 0
|
||||||
camera_process.start()
|
camera_process.start()
|
||||||
logger.info(f"Camera processor started for {self.name}: {camera_process.pid}")
|
logger.info(f"Camera processor started for {self.name}: {camera_process.pid}")
|
||||||
|
|
||||||
@ -77,7 +82,8 @@ class Camera:
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
capture_process.daemon = True
|
capture_process.daemon = True
|
||||||
self.camera_metrics.capture_process = capture_process
|
self.capture_process = capture_process
|
||||||
|
self.camera_metrics.capture_pid.value = capture_process.pid or 0
|
||||||
capture_process.start()
|
capture_process.start()
|
||||||
logger.info(f"Capture process started for {self.name}: {capture_process.pid}")
|
logger.info(f"Capture process started for {self.name}: {capture_process.pid}")
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import multiprocessing as mp
|
import multiprocessing as mp
|
||||||
from multiprocessing.sharedctypes import Synchronized
|
from multiprocessing.sharedctypes import Synchronized
|
||||||
from multiprocessing.synchronize import Event
|
from multiprocessing.synchronize import Event
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
|
|
||||||
class CameraMetrics:
|
class CameraMetrics:
|
||||||
@ -16,8 +15,8 @@ class CameraMetrics:
|
|||||||
|
|
||||||
frame_queue: mp.Queue
|
frame_queue: mp.Queue
|
||||||
|
|
||||||
process: Optional[mp.Process]
|
process_pid: Synchronized
|
||||||
capture_process: Optional[mp.Process]
|
capture_pid: Synchronized
|
||||||
ffmpeg_pid: Synchronized
|
ffmpeg_pid: Synchronized
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -32,8 +31,8 @@ class CameraMetrics:
|
|||||||
|
|
||||||
self.frame_queue = mp.Queue(maxsize=2)
|
self.frame_queue = mp.Queue(maxsize=2)
|
||||||
|
|
||||||
self.process = None
|
self.process_pid = mp.Value("i", 0)
|
||||||
self.capture_process = None
|
self.capture_pid = mp.Value("i", 0)
|
||||||
self.ffmpeg_pid = mp.Value("i", 0)
|
self.ffmpeg_pid = mp.Value("i", 0)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -247,11 +247,9 @@ def stats_snapshot(
|
|||||||
stats["cameras"] = {}
|
stats["cameras"] = {}
|
||||||
for name, camera_stats in camera_metrics.items():
|
for name, camera_stats in camera_metrics.items():
|
||||||
total_detection_fps += camera_stats.detection_fps.value
|
total_detection_fps += camera_stats.detection_fps.value
|
||||||
pid = camera_stats.process.pid if camera_stats.process else None
|
pid = camera_stats.process_pid.value or None
|
||||||
ffmpeg_pid = camera_stats.ffmpeg_pid.value if camera_stats.ffmpeg_pid else None
|
capture_pid = camera_stats.capture_pid.value or None
|
||||||
capture_pid = (
|
ffmpeg_pid = camera_stats.ffmpeg_pid.value or None
|
||||||
camera_stats.capture_process.pid if camera_stats.capture_process else None
|
|
||||||
)
|
|
||||||
stats["cameras"][name] = {
|
stats["cameras"][name] = {
|
||||||
"camera_fps": round(camera_stats.camera_fps.value, 2),
|
"camera_fps": round(camera_stats.camera_fps.value, 2),
|
||||||
"process_fps": round(camera_stats.process_fps.value, 2),
|
"process_fps": round(camera_stats.process_fps.value, 2),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user