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
|
||||
for name, camera in self.cameras.items():
|
||||
capture_process = camera.camera_metrics.capture_process
|
||||
if capture_process is not None:
|
||||
if camera.capture_process is not None:
|
||||
logger.info(f"Waiting for capture process for {name} to stop")
|
||||
capture_process.terminate()
|
||||
capture_process.join()
|
||||
camera.capture_process.terminate()
|
||||
camera.capture_process.join()
|
||||
|
||||
# ensure the camera processors are done
|
||||
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")
|
||||
camera_process.terminate()
|
||||
camera_process.join()
|
||||
camera.process.terminate()
|
||||
camera.process.join()
|
||||
logger.info(f"Closing frame queue for {name}")
|
||||
empty_and_close_queue(camera.camera_metrics.frame_queue)
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import logging
|
||||
import multiprocessing as mp
|
||||
from multiprocessing.synchronize import Event
|
||||
from typing import Optional
|
||||
|
||||
from frigate import util
|
||||
from frigate.config import FrigateConfig
|
||||
@ -22,6 +23,9 @@ class Camera:
|
||||
camera_metrics: CameraMetrics
|
||||
ptz_metrics: PTZMetrics
|
||||
|
||||
process: Optional[util.Process]
|
||||
capture_process: Optional[util.Process]
|
||||
|
||||
def __init__(self, name: str, config: FrigateConfig):
|
||||
self.name = name
|
||||
self.config = config
|
||||
@ -57,7 +61,8 @@ class Camera:
|
||||
),
|
||||
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()
|
||||
logger.info(f"Camera processor started for {self.name}: {camera_process.pid}")
|
||||
|
||||
@ -77,7 +82,8 @@ class Camera:
|
||||
),
|
||||
)
|
||||
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()
|
||||
logger.info(f"Capture process started for {self.name}: {capture_process.pid}")
|
||||
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import multiprocessing as mp
|
||||
from multiprocessing.sharedctypes import Synchronized
|
||||
from multiprocessing.synchronize import Event
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class CameraMetrics:
|
||||
@ -16,8 +15,8 @@ class CameraMetrics:
|
||||
|
||||
frame_queue: mp.Queue
|
||||
|
||||
process: Optional[mp.Process]
|
||||
capture_process: Optional[mp.Process]
|
||||
process_pid: Synchronized
|
||||
capture_pid: Synchronized
|
||||
ffmpeg_pid: Synchronized
|
||||
|
||||
def __init__(self):
|
||||
@ -32,8 +31,8 @@ class CameraMetrics:
|
||||
|
||||
self.frame_queue = mp.Queue(maxsize=2)
|
||||
|
||||
self.process = None
|
||||
self.capture_process = None
|
||||
self.process_pid = mp.Value("i", 0)
|
||||
self.capture_pid = mp.Value("i", 0)
|
||||
self.ffmpeg_pid = mp.Value("i", 0)
|
||||
|
||||
|
||||
|
||||
@ -247,11 +247,9 @@ def stats_snapshot(
|
||||
stats["cameras"] = {}
|
||||
for name, camera_stats in camera_metrics.items():
|
||||
total_detection_fps += camera_stats.detection_fps.value
|
||||
pid = camera_stats.process.pid if camera_stats.process else None
|
||||
ffmpeg_pid = camera_stats.ffmpeg_pid.value if camera_stats.ffmpeg_pid else None
|
||||
capture_pid = (
|
||||
camera_stats.capture_process.pid if camera_stats.capture_process else None
|
||||
)
|
||||
pid = camera_stats.process_pid.value or None
|
||||
capture_pid = camera_stats.capture_pid.value or None
|
||||
ffmpeg_pid = camera_stats.ffmpeg_pid.value or None
|
||||
stats["cameras"][name] = {
|
||||
"camera_fps": round(camera_stats.camera_fps.value, 2),
|
||||
"process_fps": round(camera_stats.process_fps.value, 2),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user