Python中的进程(多进程的创建方法二:multiprocessing)

没想到吧,我卢本伟打算今晚把进程的方法全总结完,我自己都没有想到,一鼓作气,就是干。之前做飞机大战浪费太多时间了,压了很多东西都没有整理,总结。所以最近更新可能会比较频繁一点。大家有什么疑问或者有什么想与我分享的都可给我留言。废话不多说,下面我们来总结多进程创建的第二种方法。
一:multiprocessing模块 方法一:
首先我们要知道为什么要使用这个模块而不使用fork函数呢?说实话fork函数比这个方法要简单,但是fork不能再Windows系统中使用,python作为一门胶水语言,怎么可能不能跨平台使用呢,所以路上有绊脚石,我们就把他干掉,multiprocessing模块就是我们的武器。
multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示启动一个子进程。
这里写图片描述
这里写图片描述
如图使用multiprocessing模块的Process类创建了一个子程序去调用run函数中的方法。
大家肯定不明白Process类怎么使用,下面我进入到python的源码中给大家看一下
这里写图片描述
下面给大家说一下Process的语法:
Process(group , target , name , args , kwargs)
target:表示这个进程实例所调用的对象(就是子进程要执行的对象或者函数方法)
args:表示调用对象的位置参数元组(默认为空元组,可以不传参)
kwargs:表示调用对象的关键字参数字典(默认为空字典,可以不传参)
name:为当前进程实例的别名(默认从P-N,N从1开始)
group:大多情况下都用不上(起码我这几天没有用到过)

下面给大家说一下Process的常用方法吧
is_alive:判断进程实例是否还在执行;
start():启动进程实例(创建子进程)
run():如果没有给定target参数,对着个对象调用start()方法时,就将执行对象中的run()方法(Prcoess类中默认有run()方法)
terminate():不管任务是否完成,都立即终止
join([timeout]):是否等待进程实例执行结束,或者等待多少秒;
说到这个等待进程实例执行结束就会引入另一个问题了,守护进程和非守护进程
因为创建了子进程之后,父进程和子进程都会同时进行。我们分开来说吧:
守护进程:由于操作系统的调度问题,不能确定进程的运行顺序,有时候子进程会比父进程先运行完,但是有时候父进程运行完了,子进程还在继续运行。这个时候如果子进程是守护进程的话,父进程运行结束,子进程也会停止,不管有没有运行结束
非守护进程:与上面我说的守护进程对比理解,**非守护进程就是当父进程运行结束后,子进程继续运行,一直到运行结束。

大家可能会疑惑,守护进程和非守护进程的作用是什么,说句实话,我现在也不太清楚。但是我们可以通过代码来指定进程是否为守护进程。
例如:
p1=multiprocessing.Process()
p1.daemon=False 或者 P1.daemon=True
这样就能指定进程是否为守护进程了

不不不,不能跑偏了,我要继续给大家说多进程的创建,使用Process创建的第二种方法。
就是要使用面向对象的思维方式了,要使用继承了。
创建一个Process的子类。
还是老样子,我给大家上张代码图方便理解。
这里写图片描述
这里写图片描述
这里就是使用的面向对象的思维,而且我用了第二种导入的方法,from …..import…..这样就不用写那么长的前缀了。
这种方式就是自定义一个类,然后继承Process类,每次实例化这个类的时候,就等同于实例化一个进程对象。
就看我上面介绍的常用方法中 对象.start()创建子进程,调用run()方法。

代码量非常小,我觉得这部分重点在于理解吧,有些理论知识你必须知道,否则你也不好理解,以上就是使用multiprocessing模块创建多进程的方式。一种是用方法,而第二种是使用面向对象创建类。

总结到最后给我自己都整懵逼了,还是得多理解理解,这样的程度还远远不够,还要继续努力啊。今天就到这里吧,明天应该还会更新内容,得考虑一下更新什么了。

溜了溜了。

猜你喜欢

转载自blog.csdn.net/SenZendao/article/details/81637886