python3修改多進程名稱的一些注意事項

今天由於便於管理,需要修改多進程(包括子進程)的名稱,網上的資料不多,基本上沒有我想要的案例,今天摸索了下才實現了我的目的,下面具體說一下。

 

首先,修改進程名,主要依靠一個第三方的模塊:setproctitle   詳情見:https://pypi.org/project/setproctitle/

用法很簡單,基本就兩個方法:

setproctitle(title)

Set title as the title for the current process.

getproctitle()

Return the current process title

 

我們先來一個例子,如下代碼:

# -*- coding: utf-8 -*-

from multiprocessing import  Process

import  time

import setproctitle

def task(name):

    print("name=",name)

    time.sleep(30)

if __name__ == "__main__":

    setproctitle.setproctitle('python3 main--')

    start = time.time()

    p1 = Process(target=task,args=("safly1",),name='python3 safly1')

    p2 = Process(target=task, args=("safly2",),name='python3 safly2')

    p3 = Process(target=task, args=("safly3",),name='python3 safly3')

    p1.start()

    p2.start()

    p3.start()

    p1.join()

    p2.join()

    p3.join()

    print("main")

    print(p1.name)

    print(p2.name)

    print(p3.name)

    end = time.time()

    print(end- start)

 

上面代碼在linux下運行後在終端打印的輸出爲:

 

輸出沒有問題,我們再通過ps -ef|grep python命令來看下查找出來的結果:

 

發現,輸出的四個進程爲均爲:python3 main--  

 

父子進程名均爲python3 main--,這是沒問題的,因爲在啓動多進程裏,通過fork出來的子進程的內存空間和父進程是一樣的。

 

這裏我們需要提醒大家的是,Process(target=task,args=("safly1",),name='python3 safly1')  這裏通過name傳參數的name並不是修改程序在服務器中運行時系統分配的進程名,這裏的name其實就是這個進程環境內的一個屬性,也可以看作是這個進程的內存空間裏的標記吧,僅此而已,實際中很多同學不小心就默認把它當進程名爲對待,這個說法不完全正確。如果需要修改進程在服務器系統中的進程名稱,那可以按如下:

# -*- coding: utf-8 -*-

from multiprocessing import  Process

import  time

import setproctitle

def task(name):

    print("name=",name)

    time.sleep(30)

if __name__ == "__main__":

    setproctitle.setproctitle('python3 main--')

    start = time.time()

    p1 = Process(target=task,args=("safly1",),name='python3 safly1')

    p2 = Process(target=task, args=("safly2",),name='python3 safly2')

    p3 = Process(target=task, args=("safly3",),name='python3 safly3')

    p1.start()

    setproctitle.setproctitle('python3 main--1')

    print(setproctitle.getproctitle())

    p2.start()

    setproctitle.setproctitle('python3 main--2')

    print(setproctitle.getproctitle())

    p3.start()

    setproctitle.setproctitle('python3 main--3')

    print(setproctitle.getproctitle())

    p1.join()

    p2.join()

    p3.join()

    print("main")

    print(p1.name)

    print(p2.name)

    print(p3.name) 

    end = time.time()

    print(end- start)

 

上面代碼在linux終端上的輸出爲:

 

查找進程信息 ps -ef|grep python3

 

 

如上所示,就可以通過命令ps來監控查詢進程了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章