进程名称是从 Python 设置的,但从外部不可见

mil*_*azs 5 python linux terminal multiprocessing python-3.x

我有一个复杂的多处理 Python 项目,它启动大约 8-10 个进程。这些进程有不同的唯一名称,并且这些名称在代码中运行良好。但是,如果我检查终端中正在运行的进程,这些进程没有唯一的名称。他们的名字与其父母的名字相同(实际上是命令行本身)。

使用环境:

  • Python 3.6.6
  • 红帽 Linux 7
  • xfce4-终端 0.8.7.4

最少的代码:

import multiprocessing
import time


def sleeping_function(s_time):
    multiprocessing.current_process().name = "process_{}".format(s_time)
    print(multiprocessing.current_process().name)
    time.sleep(s_time)


if __name__ == "__main__":
    times = [200, 201, 202, 203, 204]
    with multiprocessing.Pool(processes=len(times)) as pool:
        results = pool.map(sleeping_function, times)
Run Code Online (Sandbox Code Playgroud)

输出:

>>> python3 test.py
process_200
process_201
process_202
process_203
process_204
Run Code Online (Sandbox Code Playgroud)

检查我的终端中正在运行的进程(所有进程都在脚本中运行)。

命令:

ps  aux -u my_user_name | grep python
Run Code Online (Sandbox Code Playgroud)

输出:

my_user_name 888273  0.1  0.0 359804 11288 pts/162  Sl+  15:10   0:00 python3 test.py
my_user_name 888274  0.0  0.0 138608  8040 pts/162  S+   15:10   0:00 python3 test.py
my_user_name 888275  0.0  0.0 138608  8056 pts/162  S+   15:10   0:00 python3 test.py
my_user_name 888276  0.0  0.0 138608  8056 pts/162  S+   15:10   0:00 python3 test.py
my_user_name 888277  0.0  0.0 138608  8060 pts/162  S+   15:10   0:00 python3 test.py
my_user_name 888278  0.0  0.0 138608  8060 pts/162  S+   15:10   0:00 python3 test.py
Run Code Online (Sandbox Code Playgroud)

我想查看process_20X进程名称而不是调用的 Python 命令。

我的问题:

是否可以为外部可见的 Python 脚本进程提供唯一的名称(例如:从终端)?

Dar*_*aut 5

您可以使用setproctitle模块更改进程的系统名称。显然,该模块调用同名的 C 例程。

setproctitle.setproctitle(multiprocessing.current_process().name)
Run Code Online (Sandbox Code Playgroud)

它在 Ubuntu 上对我有用。

  • 感谢您的回答!你的解决方案也适用于 RedHat Linux,它绝对解决了我的问题! (2认同)