10月26日Process的其它小用法(了解的知识点)

发布时间 2023-10-26 19:08:46作者: songjunwan

Process的其它小用法(了解的知识点)

下面的知识点是了解的知识点,但是也要会用,分别是pid和ppid的查看方式

pid的查看方式

方式一: 直接输出查看

from multiprocessing import Process
import time


def task():
    print('子进程开启')
    time.sleep(2000)
    print('子进程关闭')

if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    print(p.pid)#查看pid的代码一定要写在start()之后

    print('主')

这个代码里面就是直接输出p.pid的值就知道pid的值了,为什么我把睡眠调了两千秒?因为我要保证这个子进程这段时间内不会结束,然后我利用这个pid号在终端里面查看pid对应的进程

结果如图

结果说明了我在终端里面通过pid就能找到对应的进程。

方式二多调用几个模块(os)和(current_Process)

代码如下

#其它查看pid的方法
import time,os#这里多调用了os模块
from multiprocessing import Process, current_process#这里还调用了current_Process这个方法


def task():
    print('子进程开启')
    print('在子进程中查看自己的pid', current_process().pid)#在子进程中查看自己的pid的另一种方法
    print('在子进程中查看自己的pid', os.getpid())#这是另一种查看pid的方式
    time.sleep(10)
    print('子进程关闭')


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    print('在主进程中查看子进程的pid', p.pid)  # 查看pid的代码一定要写在start()之后

    print('主')

结果如下

这两个方法也是可以查看的

父进程的pid值如何查看呢?

在子进程里查看父进程的pid值需要用到另一个方法也就是getppid()

代码如下

#查看父进程pid的方法
import time,os#这里多调用了os模块
from multiprocessing import Process


def task():
    print('子进程开启')
    print('在子进程中查看父进程的pid', os.getppid())#这里查看父进程的pid,使用的就是getppid()的方法
    time.sleep(10)
    print('子进程关闭')


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    print('在主进程中查看子进程的pid', p.pid)  # 查看pid的代码一定要写在start()之后

    print('主')

然后结果如下

同时也存在一个pid就是主进程的父进程的pid,那么子进程、主进程以及主进程的父进程它们三个之间的关系就类似孙子、儿子、爷爷的关系。

如何查看主进程的父进程的pid呢?就是在主进程里面使用getppid()

# 查找主进程的父进程

import time, os  # 这里多调用了os模块
from multiprocessing import Process


def task():
    print('子进程开启')
    print('在子进程中查看父进程的pid', os.getppid())  # 这里查看父进程的pid,使用的就是getppid()的方法
    print('在子进程里面查看子进程的pid', os.getpid() )
    time.sleep(1000)
    print('子进程关闭')


if __name__ == '__main__':
    p = Process(target=task)
    p.start()
    # 这里查看主进程的父进程
    print('查看主进程的父进程的pid', os.getppid())

    print('主')

结果如图

然后终端的情况

大概方式

"""
os.getpid()#获取当前进程的pid
os.getppid()#获取当前进程的父进程的pid
pid#获取当前进程的子进程pid
"""

这里总结一下子进程、主进程、主进程的父进程三者的关系以及如何诞生的

主进程:是启动其它进程的进程,通常叫父进程,主要功能负责创建、管理和操控子进程。

子进程:是主进程创建的新进程。用于执行特定的任务或操作

主进程的父进程:是启动主进程的进程,通常情况它就是操作系统本身

工作流程:主进程的父进程启动主进程,主进程此时调用多进程库(如现在的multiprocessing)来创建一个或多个子进程。子进程被创建成功后就会继承主进程的代码、数据以及资源(和类与类之间的继承思路基本一致),同时它的执行与其它子进程是独立的

可以这么理解就是先有你爷(主进程的父进程)创造了你的父亲(主进程)然后再由你父亲创建了你(子进程)。这么一说就能理清了