日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python设置进程名称

發布時間:2024/1/2 python 47 coder
生活随笔 收集整理的這篇文章主要介紹了 Python设置进程名称 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

技術背景

當我們在同一個機器上管理多個進程時,經常會遇到一個問題是,很多進程的名稱可能是重復的。以Linux系統為例,進程名稱默認使用的是argv[0]。這樣一來,如果在一臺機器上有很多個Python任務,使用ps -a命令就可以看到大量重名的python3進程。雖然這些進程ID是獨一無二的,但是光看進程ID可能無法直觀的分辨是誰在執行什么樣的任務。這里我們可以使用python的setproctitle庫來對進程名臣進行修改,讓進程名稱更加的直觀。

安裝與準備工作

可以直接通過pip來安裝和管理setproctitle:

$ python3 -m pip install setproctitle
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting setproctitle
  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/45/8d/68eec8de2d22a8ed6004344b35f94f2407ba723beee6ab468f162bb7be3e/setproctitle-1.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31 kB)
Installing collected packages: setproctitle
Successfully installed setproctitle-1.3.3

安裝完成后,我們用一個簡單的示例來展示一下普通運行python代碼的場景。如下代碼的功能是,先打印進程ID和進程名稱,然后休眠10秒時間:

import os
import time
import setproctitle

proc_title = setproctitle.getproctitle()
print ('Process ID of this process is: {}'.format(os.getpid()))
print ('Process title of this process is: {}'.format(proc_title))

time.sleep(10)

這樣一來,除了可以在終端窗口上面看到程序運行的代碼輸出之外,我們還可以有時間在另一個終端窗口上查看ps -a來進行比對。首先看下程序輸出:

$ python3 proc_01.py 
Process ID of this process is: 1516803
Process title of this process is: python3 proc_01.py

然后對比一下ps -a的輸出內容,首先是運行proc_01.py之前查看ps -a的內容:

$ ps -a
    PID TTY          TIME CMD
 530079 pts/2    08:37:09 nvitop
 530867 pts/0    03:05:13 top
1516785 pts/7    00:00:00 ps

然后是運行proc_01.py之后查看ps -a的內容:

$ ps -a
    PID TTY          TIME CMD
 530079 pts/2    08:37:09 nvitop
 530867 pts/0    03:05:13 top
1516803 pts/4    00:00:00 python3 proc_01
1516804 pts/7    00:00:00 ps

這里我們發現多了一個1516803的進程,名稱為python3 proc_01,跟上面程序輸出的內容是一致的,只是在打印時自動省略了一些字符串的顯示。

那么到這里我們就有可能遇到背景介紹中所提到的,如果同時運行100個相同的進程任務,那么在進程名稱上是無法分辨的。接下來會使用到setproctitle的修改進程名稱的功能。

修改進程名稱

我們可以使用setproctitle的setproctitle()函數,來將進程名稱設置成一個獨一無二的編號,類似于進程ID。而這個獨一無二的ID編號,我們一般用uuid來生成:

import os
import uuid
import time
import setproctitle

proc_title = setproctitle.getproctitle()
print ('Process ID of this process is: {}'.format(os.getpid()))
print ('Process title of this process is: {}'.format(proc_title))

setproctitle.setproctitle('{}'.format(uuid.uuid1()))
proc_title = setproctitle.getproctitle()
print ('Process ID after modify proctitle is: {}'.format(os.getpid()))
print ('Process title after modify is: {}'.format(proc_title))

time.sleep(10)

程序的運行結果如下:

$ python3 proc_01.py 
Process ID of this process is: 1517118
Process title of this process is: python3 proc_01.py
Process ID after modify proctitle is: 1517118
Process title after modify is: 73409484-a91c-11ee-9b4b-b07b25070cd2

我們可以看到,在進程ID不變的情況下,我們成功的把進程名稱修改成了一個我們想要的字符串。同樣的,如果是用ps -a也能夠看到被修改后的進程名稱:

$ ps -a
    PID TTY          TIME CMD
 530079 pts/2    08:37:17 nvitop
 530867 pts/0    03:05:16 top
1517118 pts/4    00:00:00 73409484-a91c-1
1517121 pts/7    00:00:00 ps

如果為了識別度更好一些,我們可以直接在進程名稱上面把當前系統的用戶名加上,這樣即時是不同的用戶跑同一個任務也可以進行區分。這里用戶名我們通過os.getlogin()函數來獲得:

import os
import uuid
import time
import setproctitle

proc_title = setproctitle.getproctitle()
print ('Process ID of this process is: {}'.format(os.getpid()))
print ('Process title of this process is: {}'.format(proc_title))

setproctitle.setproctitle('{}-{}'.format(os.getlogin(), uuid.uuid1()))
proc_title = setproctitle.getproctitle()
print ('Process ID after modify proctitle is: {}'.format(os.getpid()))
print ('Process title after modify is: {}'.format(proc_title))

time.sleep(10)

輸出結果如下:

$ python3 proc_01.py 
Process ID of this process is: 1517417
Process title of this process is: python3 proc_01.py
Process ID after modify proctitle is: 1517417
Process title after modify is: dechin-f6808444-a91c-11ee-9809-b07b25070cd2

進程名稱被成功修改。

總結概要

更好的管理系統進程,是每一個程序員的進階必經之路。尤其是使用多進程、多用戶的場景,系統內的進程是非常混亂的。如果在運行程序時都能控制好進程名稱,那么就可以直接通過進程名稱來監管和控制進程的執行和輸出。本文介紹了setproctitle這樣一個工具的簡單使用,可以在python代碼內部對進程進行管理。

版權聲明

本文首發鏈接為:https://www.cnblogs.com/dechinphy/p/pname.html

作者ID:DechinPhy

更多原著文章:https://www.cnblogs.com/dechinphy/

請博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html

參考鏈接

  1. https://www.cnblogs.com/lsdb/p/13299917.html

總結

以上是生活随笔為你收集整理的Python设置进程名称的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。