多进程编程
多任务编程分为:多进程,多线程。
多任务:多个任务同时执行,提高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