diff --git a/pyproject.toml b/pyproject.toml index 9319decfd..ec7cf3248 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,6 +51,7 @@ dependencies = [ "pyzmq>=27.1.0", "msgpack>=1.1.2", "aiolimiter>=1.2.1", + "setproctitle>=1.3.0", ] [dependency-groups] diff --git a/verifiers/serve/server/env_server.py b/verifiers/serve/server/env_server.py index 20c5262fa..8d7668413 100644 --- a/verifiers/serve/server/env_server.py +++ b/verifiers/serve/server/env_server.py @@ -15,7 +15,7 @@ import verifiers as vf from verifiers.serve.server.env_router import EnvRouter -from verifiers.utils.process_utils import monitor_death_pipe +from verifiers.utils.process_utils import monitor_death_pipe, set_proc_title class EnvServer(ABC): @@ -41,6 +41,7 @@ def __init__( stats_log_interval: float = 10.0, death_pipe: Connection | None = None, ): + set_proc_title("EnvServer") self.death_pipe = death_pipe logger_kwargs: dict[str, Any] = { diff --git a/verifiers/serve/server/env_worker.py b/verifiers/serve/server/env_worker.py index 4dc2742e2..37c46f0b1 100644 --- a/verifiers/serve/server/env_worker.py +++ b/verifiers/serve/server/env_worker.py @@ -32,7 +32,7 @@ from verifiers.types import ClientConfig from verifiers.utils.async_utils import EventLoopLagMonitor, EventLoopLagStats from verifiers.utils.client_utils import resolve_client_config -from verifiers.utils.process_utils import monitor_death_pipe +from verifiers.utils.process_utils import monitor_death_pipe, set_proc_title from verifiers.utils.serve_utils import msgpack_encoder @@ -68,6 +68,7 @@ def __init__( stats_address: str, death_pipe: Connection | None = None, ): + set_proc_title(f"EnvWorker{worker_id}") self.death_pipe = death_pipe self.env_id = env_id self.worker_id = worker_id diff --git a/verifiers/utils/process_utils.py b/verifiers/utils/process_utils.py index e53ee97e4..4b0486a2e 100644 --- a/verifiers/utils/process_utils.py +++ b/verifiers/utils/process_utils.py @@ -7,8 +7,23 @@ from multiprocessing.connection import Connection from multiprocessing.process import BaseProcess +import setproctitle + logger = logging.getLogger(__name__) +VERIFIERS_PROC_PREFIX = "Verifiers" + + +def set_proc_title(name: str) -> None: + """Set the process title for visibility in tools like ``ps`` and ``htop``. + + Args: + name: A short, descriptive label (e.g. ``EnvServer``, ``EnvWorker0``). + The process title is set to ``{VERIFIERS_PROC_PREFIX}::{name}``. + """ + title = f"{VERIFIERS_PROC_PREFIX}::{name}" + setproctitle.setproctitle(title) + def monitor_death_pipe(death_pipe: Connection) -> None: """Monitor a death pipe and send SIGTERM to this process when it closes.