python多任务编程 ----多进程

多进程编程

     多任务编程分为:多进程,多线程。

     多任务:多个任务同时执行,提高CPU的利用率。

      进程:一个正在执行的程序或软件,它是内存条分配资源的基本单元。

      并发:任务数 > CPU数

      并行:任务数 ≤ CPU数


多进程的基本语法:

    1.引入进程模块包

    2.创建主进程和子进程

    3.运行子进程

多进程代码示例:(仔细阅读代码,代码里面有明显的注释,特别强调一点:多个子进程执行没有先后顺序,他们是随机运行的,读者可以多试几次就可以发现这一特点了)


# 调用multiprocessing模块和time模块

import multiprocessing

import time

def sing():

    for i in range(5):

        print("唱歌中")

        print("这是子进程sing_pro")

        time.sleep(1)

def dance():

    for i in range(5):

        print("跳舞中")

        print("这是子进程dance_pro")

        time.sleep(1)

# 创建子进程

if __name__ == "__main__":

    print("主进程开始")

    dance_pro = multiprocessing.Process(target=dance)

    sing_pro = multiprocessing.Process(target=sing)

    # 开启子进程

    dance_pro.start()

    sing_pro.start()

    # join方法是进程阻塞,等此进程执行完之后再执行下面的代码

    dance_pro.join()

    sing_pro.join()

    print("主进程结束")


    多进程传参:

    args方法:

        dance_pro = multiprocessing.Process(target=dance, args=(3,))

    args方法:

        dance_pro = multiprocessing.Process(target=dance, args=(3,),kwargs={"time":1})

获取进程编号:每一个子进程都是通过主进程创建出来的,先有主,再有子。


重点:主进程和子进程执行的先后顺序:如果没有设置阻塞的话,主进程会最先执行,主进程开始执行后,就会创建子进程,然后子进程开始执行,从此之后,子进程和主进程之间在没有任何关系,主进程不会等待子进程结束之后在结束,但是整个程序会等待子进程结束之后在结束,程序结束的标志是:Process finished with exit code 0。

    1.获取子进程编号

        print("sing子进程编号:", os.getpid())  # 在子进程的代码中 

        # os.getpid() 其实是获取当前进程的编号

    2.获取父进程编号

        print("获取父进程编号:", os.getppid()) # 在子进程的代码中

        杀死进程:相当于windows任务管理器里面的结束进程

        要根据进程编号去杀死进程

        语法:os.kill(os.getpid(), 9) # 9是指令,一般都用9


多进程注意事项:

    1.进程之间不共享全局变量,每个进程的数据相互独立。

    2.当创建子线程之后,主线程和子线程之后再无关系,但是程序会等待所有线程结束之后再结束。

    3.守护主线程:程序一旦结束,所有子线程也要跟着结束。(应用于程序突然中止时) 

    子进程.daemon = True  必须写在start方法之前(先定义守护主线程)

  4. 子进程.terminate()  必须写在start方法之后 (先开始,然后再terminate)

拓展方法:

    exit()方法是用来结束整个程序的,后面的代码不在执行。

你可能感兴趣的:(python多任务编程 ----多进程)