多进程模块multiprocessing

来源:互联网 发布:matlab2016b mac 编辑:程序博客网 时间:2024/06/05 19:51

multiprocessing模块就是跨平台版本的多进程模块,提供了Process类来代表一个进程对象

 

创建进程时,只需要传⼊⼀个执函数和函数的参数,创建

Process实例,start()方法启动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-NN为从1开始递增的整数;

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

from multiprocessing import ProcessP必须大写

import os

import time

 

 

defsub_process_fun(num, a):

    """子进程执行的代码"""

    print("子进程:pid=%d" % os.getpid())

    print("子进程:num=%d" % num)

    print("子进程:a=%d" % a)

    for i in range(10):

        print("子进程:hello")

        time.sleep(0.1)

 

 

def main():

    print("父进程:pid=%d" % os.getpid())

    p = Process(target=sub_process_fun,args=(100,), kwargs={"a": 200}) 

# 创建一个子进程对象

    p.start()  #真正的创建出子进程,子进程可以开始执行代码

    print("父进程:hi")

    print("父进程:子进程的名字 %s" % p.name)

    print("父进程:子进程的pid %d" % p.pid)

    print("父进程:子进程的状态 %s" % p.is_alive())

    time.sleep(0.1)

 

   p.terminate()  #终止子进程的执行 存在延迟

    print("父进程:已经终止了子进程")

    print("父进程:子进程的状态 %s" % p.is_alive())

 

   p.join()  #回收子进程资源 阻塞

    print("父进程:已经回收了子进程")

    print("父进程:子进程的状态 %s" % p.is_alive())

    print("父进程:结束")

 

 

if __name__ =='__main__':

    main()


原创粉丝点击