Дубликат названия python многопроцессорных процессов - PullRequest
0 голосов
/ 01 февраля 2020

Я использую многопроцессорную библиотеку Python. Внутри основного процесса я создаю другой процесс. Когда я делаю ps aux на терминале, я получаю две записи с одинаковым именем

ps aux | grep multithreadTest
abhishek  9017 57.6  0.1 121888 11412 pts/8    Rl+  21:09   0:04 python multithreadTest.py
abhishek  9018 16.2  0.0  48156  7096 pts/8    R+   21:09   0:01 python multithreadTest.py

Оба эти процесса должны взаимодействовать друг с другом и выполняют две разные задачи. Немного сбивает с толку, что делает pid, потому что они показывают одно и то же имя. Это плохо для устранения неполадок. Мой код будет развернут на производственных серверах и будет управляться ребятами из SRE. Для них может быть непонятно, почему есть два экземпляра одной и той же задачи.

Есть ли способ, которым я могу предоставить более описательное имя для отображения на ps aux для процесса, который я создаю? Я знаю, что это возможно в C ++.

Один из способов - написать два python сценария с разными именами и иметь менеджер bash, который вызывает их оба. Но при этом оба они станут не связанными, и управление и общение между ними будет затруднено.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 01 февраля 2020

У них одинаковое хаме, так как все процессы разветвляются из одного и того же главного процесса.

Вам необходимо использовать специальные системные инструменты для переименования имени процесса. Например, setproctitle модуль: pip install setproctitle

Затем в процессе вызова функции setproctitle.setproctitle("new child process name").

Вот небольшой пример:

from multiprocessing import Process
import setproctitle
import time

def a_worker():
    setproctitle.setproctitle("procA")
    time.sleep(10)

def b_worker():
    setproctitle.setproctitle("procB")
    time.sleep(10)

if __name__ == "__main__":
    print("Master process title:", setproctitle.getproctitle())

    a_proc = Process(target=a_worker)
    b_proc = Process(target=b_worker)

    # Spawn processes
    a_proc.start() 
    b_proc.start()

    # Wait for processes to terminate
    a_proc.join()
    b_proc.join()

    print("Master process title after kids:", setproctitle.getproctitle())

Вывод ps -fu:

363  5.2  0.1  29736 10524 tty1     S    01:25   0:00  \_ python3 ab.py
370  0.0  0.0  29736  4424 tty1     S    01:25   0:00      \_ procA
371  0.2  0.0  29736  4216 tty1     S    01:25   0:00      \_ procB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...