开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情
学会了怎么使用多进程来编程了后,我们再看一下Python父进程与子进程的内容
获取进程编号,确定父子关系
第一个就是获取进程的编号,使用**os.getpid()方法就可以获取当前进程编号,使用os.getppid()**获取的是当前进程的父进程的编号,使用os首先要导入os,使用import os,而通过查询进程的编号我们可以确定进程的父子关系。
进程的任务还可以传参,Process类支持以元组的形式传参和以字典的方式进行传参。这里我们举个例子看一下:
def show_info(name, age):
print(name, age)
sub_process = multiprocessing.Process(target=show_info, args=("cxk",), kwargs={"age": 20})
sub_process.start()
这里我们写了三行代码,第一行我们定义了一个方法,输出传入的名字和年龄,第二行代码创建进程,调用我们定义的方法,并通过args传入元组参数值,通过kwargs传入字典参数值,第三行代码就是启动进程。
有一点我们需要注意一下,程序中全局变量的数据在进程之间是不共享的,所以你不可能通过一个进程来添加数据,然后通过另一个进程来读取添加的数据,这是不现实的。因为进程操作的都是自己的进程内的变量。
主进程与子进程的生命周期
主进程和子进程的生命周期之间的关系是怎么样的呢?其实,主进程是在子进程运行结束后才会结束的,如果想让主进程销毁子进程也跟着销毁的话,有两种方式,一种是通过守护进程,我们知道守护进程会随着主进程的销毁而销毁,另一种是通过在主进程中主动销毁子进程
守护进程
守护进程的设置是在子进程正式启动前进行设置,比如:sub_process.daemon = True,通过这行代码的设置,就可以让子进程变成主进程的守护进程。
销毁子进程
销毁子进程也很简单,只需要调用sub_process.terminate()就可以让子进程进行销毁。
小结
这篇文章我们讲了Python如何通过程序获取进程的编号,从而确定进程的父子关系,并讲了如何让主进程与子进程在生命周期上保持一致,共同结束,一种是通过守护进程,一种是通过销毁子进程的方式。