Source code for edri.abstract.manager.worker

from __future__ import annotations

from dataclasses import dataclass, field
from multiprocessing.connection import Connection
from pathlib import Path
from typing import Any, Protocol
from uuid import UUID

from edri.dataclass.event import Event
from edri.dataclass.worker import (
    WorkerExit, WorkerOutcome, WorkerPolicy, WorkerState, WorkerStopReason,
    WorkerTimeout,
)


[docs] class WorkerRuntimeProtocol(Protocol): """Runtime operations owned by :class:`WorkerController`.""" name: str
[docs] def start(self) -> None: ...
[docs] def is_alive(self) -> bool: ...
def _bind_lifecycle(self, cancel_event: Any) -> None: ... def _bind_router_queue(self, router_queue: Any) -> None: ... def _request_cancel(self) -> None: ...
[docs] class WorkerFactoryProtocol(Protocol): """Constructor contract for thread and process worker classes.""" def __call__( self, pipe: Connection, event: Event | None, name: str, /, *args: Any, **kwargs: Any, ) -> WorkerRuntimeProtocol: ...
[docs] @dataclass(slots=True) class Worker: event: Event | None resolver: WorkerFactoryProtocol args: tuple[Any, ...] = () kwargs: dict[str, Any] = field(default_factory=dict) environment: Path | None = None policy: WorkerPolicy = field(default_factory=WorkerPolicy) state: WorkerState = WorkerState.PENDING pipe: Connection | None = None runtime: WorkerRuntimeProtocol | None = None created: float = 0.0 spawned: float | None = None started: float | None = None stop_requested: float | None = None finished: float | None = None stop_reason: WorkerStopReason | None = None timeout: WorkerTimeout | None = None outcome: WorkerOutcome | None = None exit: WorkerExit | None = None pending_responses: set[UUID] = field(default_factory=set)
[docs] class WorkerNotFoundError(KeyError): """Raised when cancellation targets a worker that is no longer registered."""
__all__ = [ "Worker", "WorkerExit", "WorkerFactoryProtocol", "WorkerNotFoundError", "WorkerOutcome", "WorkerPolicy", "WorkerRuntimeProtocol", "WorkerState", "WorkerStopReason", "WorkerTimeout", ]