Python_进程(二)

来源:互联网 发布:综漫 收集数据做主神 编辑:程序博客网 时间:2024/05/22 10:45

前言:

上篇说道了使用fork函数创建多进程,但是fork只能在Mac/Linux/Unix操作系统上使用,但是如果我们想在Windows上使用Python创建多进程该怎么办?

庆幸的是Pythong是跨平台的,自然就提供了一个跨平台的多进程支持-------multiprocessing模块。

可以使用multiprocessing模块中的Process类来代表一个进程对象。(通过创建一个Process类的实例对象可以完成子进程的创建)

演示代码:

from multiprocessing import Processdef sub_process(arg):    print("子进程的:%s" % arg)if __name__ == '__main__':    print("父进程")    p = Process(target=sub_process, args=("参数",))    p.start()    p.join()
输出结果:

父进程
子进程的:参数


创建子进程时,需要传入一个执行函数和函数的参数,创建一个Process的实例,使用start()方法开启  执行sub_process函数里面的代码。当sub_process函数里面的代码执行完之后,就意味着这个进程执行结束。

使用Process创建的子进程有一个特点,主进程在结束之前等待所有的子进程都结束,主进程才结束。

join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。也可以理解为回收子进程。

语法结构和常用的方法、属性

Process语法结构如下:

Process([group [, target [, name [, args [, kwargs]]]]])

target:表示这个进程实例所调用对象;

args:表示调用对象的位置参数元组;

kwargs:表示调用对象的关键字参数字典;

name:为当前进程实例的别名;

group:大多数情况下用不到;


Process类常用方法:


is_alive():判断进程实例是否还在执行;

join([timeout]):是否等待进程实例执行结束,或等待多少秒;

start():启动进程实例(创建子进程);

run():如果没有给定target参数,对这个对象调用start()方法时,就将执行对象中的run()方法;

terminate():不管任务是否完成,立即终止;


Process类常用属性:

name:当前进程实例别名,默认为Process-N,N为从1开始递增的整数;

pid:当前进程实例的PID值;

进程的创建--Process子类

当使用函数创建的进程无法满足我们的需求时,我们可以使用Process子类创建进程。

自定义一个类,继承Process类,每次实例化这个类的时候,就相当于实例化一个进程。

演示代码:

from multiprocessing import Processclass SubProcess(Process):    def run(self):        print("子进程")def main():    print("父进程")    p = SubProcess()    p.start()main()
输出结果:

父进程
子进程

总结:

这篇博客一共讲了用两种方式创建进程,一种是使用multiprocessing模块中的Process类创建进程;另一种是使用Process子类创建进程。

原创粉丝点击