45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
"""Lifecycle owner for the OpenClaw embedding worker."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import threading
|
|
|
|
|
|
_worker_thread = None
|
|
_worker_lock = threading.Lock()
|
|
|
|
|
|
def _run_worker() -> None:
|
|
from services.openclaw_learning_service import run_embedding_worker_loop
|
|
|
|
run_embedding_worker_loop()
|
|
|
|
|
|
def start_embedding_worker() -> threading.Thread:
|
|
"""Start exactly one worker in the dedicated scheduler process."""
|
|
global _worker_thread
|
|
|
|
with _worker_lock:
|
|
if _worker_thread is not None and _worker_thread.is_alive():
|
|
return _worker_thread
|
|
worker = threading.Thread(
|
|
target=_run_worker,
|
|
daemon=True,
|
|
name="openclaw-embedding-worker",
|
|
)
|
|
worker.start()
|
|
_worker_thread = worker
|
|
return worker
|
|
|
|
|
|
def embedding_worker_runtime_status() -> dict:
|
|
worker = _worker_thread
|
|
return {
|
|
"runtime_owner": "momo-scheduler",
|
|
"thread_name": worker.name if worker else None,
|
|
"running": bool(worker and worker.is_alive()),
|
|
}
|
|
|
|
|
|
__all__ = ["embedding_worker_runtime_status", "start_embedding_worker"]
|