mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-01 19:17:41 +03:00
Add more processes
This commit is contained in:
parent
4b913953a1
commit
e8dd382280
@ -65,7 +65,7 @@ from frigate.ptz.onvif import OnvifController
|
||||
from frigate.record.cleanup import RecordingCleanup
|
||||
from frigate.record.export import migrate_exports
|
||||
from frigate.record.record import manage_recordings
|
||||
from frigate.review.review import manage_review_segments
|
||||
from frigate.review.review import ReviewProcess
|
||||
from frigate.stats.emitter import StatsEmitter
|
||||
from frigate.stats.util import stats_init
|
||||
from frigate.storage import StorageMaintainer
|
||||
@ -236,12 +236,7 @@ class FrigateApp:
|
||||
logger.info(f"Recording process started: {recording_process.pid}")
|
||||
|
||||
def init_review_segment_manager(self) -> None:
|
||||
review_segment_process = util.Process(
|
||||
target=manage_review_segments,
|
||||
name="review_segment_manager",
|
||||
args=(self.config,),
|
||||
)
|
||||
review_segment_process.daemon = True
|
||||
review_segment_process = ReviewProcess(self.config)
|
||||
self.review_segment_process = review_segment_process
|
||||
review_segment_process.start()
|
||||
self.processes["review_segment"] = review_segment_process.pid or 0
|
||||
|
||||
@ -18,11 +18,10 @@ from frigate.config.camera.updater import (
|
||||
)
|
||||
from frigate.const import SHM_FRAMES_VAR
|
||||
from frigate.models import Regions
|
||||
from frigate.util import Process as FrigateProcess
|
||||
from frigate.util.builtin import empty_and_close_queue
|
||||
from frigate.util.image import SharedMemoryFrameManager, UntrackedSharedMemory
|
||||
from frigate.util.object import get_camera_regions_grid
|
||||
from frigate.video import CameraTracker, capture_camera
|
||||
from frigate.video import CameraCapture, CameraTracker
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -183,11 +182,7 @@ class CameraMaintainer(threading.Thread):
|
||||
frame_size = config.frame_shape_yuv[0] * config.frame_shape_yuv[1]
|
||||
self.frame_manager.create(f"{config.name}_frame{i}", frame_size)
|
||||
|
||||
capture_process = FrigateProcess(
|
||||
target=capture_camera,
|
||||
name=f"camera_capture:{name}",
|
||||
args=(config, count, self.camera_metrics[name]),
|
||||
)
|
||||
capture_process = CameraCapture(config, count, self.camera_metrics[name])
|
||||
capture_process.daemon = True
|
||||
self.capture_processes[name] = capture_process
|
||||
capture_process.start()
|
||||
|
||||
@ -1,36 +1,23 @@
|
||||
"""Run recording maintainer and cleanup."""
|
||||
|
||||
import logging
|
||||
import multiprocessing as mp
|
||||
import signal
|
||||
import threading
|
||||
from types import FrameType
|
||||
from typing import Optional
|
||||
|
||||
from setproctitle import setproctitle
|
||||
|
||||
import frigate.util as util
|
||||
from frigate.config import FrigateConfig
|
||||
from frigate.review.maintainer import ReviewSegmentMaintainer
|
||||
from frigate.util.services import listen
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def manage_review_segments(config: FrigateConfig) -> None:
|
||||
stop_event = mp.Event()
|
||||
class ReviewProcess(util.Process):
|
||||
def __init__(self, config: FrigateConfig) -> None:
|
||||
super().__init__(name="frigate.review_segment_manager", daemon=True)
|
||||
self.config = config
|
||||
|
||||
def receiveSignal(signalNumber: int, frame: Optional[FrameType]) -> None:
|
||||
stop_event.set()
|
||||
|
||||
signal.signal(signal.SIGTERM, receiveSignal)
|
||||
signal.signal(signal.SIGINT, receiveSignal)
|
||||
|
||||
threading.current_thread().name = "process:review_segment_manager"
|
||||
setproctitle("frigate.review_segment_manager")
|
||||
listen()
|
||||
|
||||
maintainer = ReviewSegmentMaintainer(
|
||||
config,
|
||||
stop_event,
|
||||
)
|
||||
maintainer.start()
|
||||
def run(self) -> None:
|
||||
self.pre_run_setup()
|
||||
maintainer = ReviewSegmentMaintainer(
|
||||
self.config,
|
||||
self.stop_event,
|
||||
)
|
||||
maintainer.start()
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
import datetime
|
||||
import logging
|
||||
import multiprocessing as mp
|
||||
import os
|
||||
import queue
|
||||
import signal
|
||||
import subprocess as sp
|
||||
import threading
|
||||
import time
|
||||
@ -12,7 +10,6 @@ from multiprocessing.synchronize import Event as MpEvent
|
||||
from typing import Any
|
||||
|
||||
import cv2
|
||||
from setproctitle import setproctitle
|
||||
|
||||
import frigate.util as util
|
||||
from frigate.camera import CameraMetrics, PTZMetrics
|
||||
@ -318,7 +315,7 @@ class CameraWatchdog(threading.Thread):
|
||||
ffmpeg_cmd, self.logger, self.logpipe, self.frame_size
|
||||
)
|
||||
self.ffmpeg_pid.value = self.ffmpeg_detect_process.pid
|
||||
self.capture_thread = CameraCapture(
|
||||
self.capture_thread = CameraCaptureRunner(
|
||||
self.config,
|
||||
self.shm_frame_count,
|
||||
self.frame_index,
|
||||
@ -396,7 +393,7 @@ class CameraWatchdog(threading.Thread):
|
||||
return newest_segment_time
|
||||
|
||||
|
||||
class CameraCapture(threading.Thread):
|
||||
class CameraCaptureRunner(threading.Thread):
|
||||
def __init__(
|
||||
self,
|
||||
config: CameraConfig,
|
||||
@ -440,31 +437,28 @@ class CameraCapture(threading.Thread):
|
||||
)
|
||||
|
||||
|
||||
def capture_camera(
|
||||
config: CameraConfig, shm_frame_count: int, camera_metrics: CameraMetrics
|
||||
):
|
||||
stop_event = mp.Event()
|
||||
class CameraCapture(util.Process):
|
||||
def __init__(
|
||||
self, config: CameraConfig, shm_frame_count: int, camera_metrics: CameraMetrics
|
||||
) -> None:
|
||||
super().__init__(name=f"camera_capture:{config.name}", daemon=True)
|
||||
self.config = config
|
||||
self.shm_frame_count = shm_frame_count
|
||||
self.camera_metrics = camera_metrics
|
||||
|
||||
def receiveSignal(signalNumber, frame):
|
||||
stop_event.set()
|
||||
|
||||
signal.signal(signal.SIGTERM, receiveSignal)
|
||||
signal.signal(signal.SIGINT, receiveSignal)
|
||||
|
||||
threading.current_thread().name = f"capture:{config.name}"
|
||||
setproctitle(f"frigate.capture:{config.name}")
|
||||
|
||||
camera_watchdog = CameraWatchdog(
|
||||
config,
|
||||
shm_frame_count,
|
||||
camera_metrics.frame_queue,
|
||||
camera_metrics.camera_fps,
|
||||
camera_metrics.skipped_fps,
|
||||
camera_metrics.ffmpeg_pid,
|
||||
stop_event,
|
||||
)
|
||||
camera_watchdog.start()
|
||||
camera_watchdog.join()
|
||||
def run(self) -> None:
|
||||
self.pre_run_setup()
|
||||
camera_watchdog = CameraWatchdog(
|
||||
self.config,
|
||||
self.shm_frame_count,
|
||||
self.camera_metrics.frame_queue,
|
||||
self.camera_metrics.camera_fps,
|
||||
self.camera_metrics.skipped_fps,
|
||||
self.camera_metrics.ffmpeg_pid,
|
||||
self.stop_event,
|
||||
)
|
||||
camera_watchdog.start()
|
||||
camera_watchdog.join()
|
||||
|
||||
|
||||
class CameraTracker(util.Process):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user