mpm: Set names for all MPM processes

During debug, it is often helpful to distinguish the processes by
name. By default, Python processes inherit the name of the parent,
which is the name of the script executed. This change sets explicit
names for all our MPM processes.
This commit is contained in:
Lars Amsel 2025-02-07 17:45:34 +01:00 committed by Jörg Hofrichter
parent a4154923c0
commit 948c31387d
3 changed files with 13 additions and 4 deletions

View File

@ -7,8 +7,9 @@
"""
import socket
from multiprocessing import Process
from multiprocessing import Process, current_process
import setproctitle
from usrp_mpm.mpmlog import get_main_logger
from usrp_mpm.mpmtypes import MPM_DISCOVERY_PORT
from usrp_mpm.mpmutils import to_binary_str
@ -41,6 +42,7 @@ def _discovery_process(state, discovery_addr):
Is spawned by spawn_discovery_process().
"""
setproctitle.setproctitle(current_process().name)
log = get_main_logger().getChild("discovery")
def create_response_string(state):

View File

@ -8,8 +8,9 @@
import re
import signal
from multiprocessing import Event, Process, Value
from multiprocessing import Event, Process, Value, current_process
import setproctitle
from usrp_mpm.mpmutils import poll_with_timeout, register_chained_signal_handler
from usrp_mpm.sys_utils.gpio import Gpio
@ -279,10 +280,12 @@ class DioControl:
}
self._dio0_fault_monitor = Process(
target=self._monitor_dio_fault,
name="DIO0 fault monitor",
args=("A", "DIO_INT0", self._tear_down_monitor, self._dio_fault["PORTA"]),
)
self._dio1_fault_monitor = Process(
target=self._monitor_dio_fault,
name="DIO1 fault monitor",
args=("B", "DIO_INT1", self._tear_down_monitor, self._dio_fault["PORTB"]),
)
register_chained_signal_handler(signal.SIGINT, self._monitor_int_handler)
@ -315,6 +318,7 @@ class DioControl:
If there is a fault, turn off external power.
"""
self.log.trace("Launching monitor loop...")
setproctitle.setproctitle(current_process().name)
fault_line = Gpio(fault, Gpio.FALLING_EDGE)
while True:
try:

View File

@ -13,10 +13,11 @@ import sys
import threading
import traceback
from contextlib import contextmanager
from multiprocessing import Process, RLock
from multiprocessing import Process, RLock, current_process
from random import choice
from string import ascii_letters, digits
import setproctitle
from gevent import Greenlet, monkey, spawn_later
from gevent.pool import Pool
from gevent.server import StreamServer
@ -616,6 +617,7 @@ def _rpc_server_process(shared_state, port, default_args):
:param port: The port to run the RPC server on
:param default_args: The arguments passed by the app
"""
setproctitle.setproctitle(current_process().name)
connections = Pool(1000)
server = StreamServer(
("0.0.0.0", port), handle=MPMServer(shared_state, default_args), spawn=connections
@ -631,7 +633,7 @@ def _rpc_server_process(shared_state, port, default_args):
server.stop()
sys.exit(0)
threading.Thread(target=stop_worker, daemon=True).start()
threading.Thread(target=stop_worker, name="Stop listener", daemon=True).start()
register_chained_signal_handler(signal.SIGTERM, lambda *args: stop_event.set())
register_chained_signal_handler(signal.SIGINT, lambda *args: stop_event.set())
server.serve_forever()
@ -646,6 +648,7 @@ def spawn_rpc_process(state, udp_port, default_args):
"""
proc = Process(
target=_rpc_server_process,
name="RPCServer",
args=[state, udp_port, default_args],
)
proc.start()