一、守护进程:
借助 daemon=True,必须在被守护的进程开启之前写上 会让被守护的子进程随着主进程的结束而结束
start 开启进程
join 阻塞进
举例守护进程,异步阻塞
import time from multiprocessing import Process def func(): #设置要守护的函数 print('~' * 10) time.sleep(15) #让子进程执行时间是十五秒 ,对比主进程10秒之后,是否会打印 --》 '@'*20 print('@'*20) #打印标识; def compire(): ##设置对比的函数 while True: #守护之后,会在主进程10秒之后也跟着结束 time.sleep(1) print('过去1秒') if __name__=='__main__': p=Process(target=func) p.daemon=True #守护第一个子进程 p.start() #开启第一个子进程 c=Process(target=compire) c.daemon=True #守护第二个子进程 c.start() #开启第二个子进程 for i in range(100): time.sleep(0.1) print('*'*i) # 让主进程十秒后结束
总结:
""" 守护进程,就是能够在主进程结束之后,子进程无论是循环还是有其他没有执行的内容,都不会执行了 如果有两个子进程,只保护其中一个,则两另一个子进程不会守护影响,会继续执行 进程守护要写在,start 之前 被守护进程中不能再开启子进程 """
二、进程中的其他方法:
pid查看进程ip
name查看进程名字
terminate 终结一个进程
is_alive() 查看一个进程是否活着,返回True False
import os import time from multiprocessing import Process def func(p): #由于主进程已经关闭了子进程,所以子进程不会再执行了 print('%s子进程ip'%os.getpid()) #子进程ip if __name__ == '__main__': p = Process(target=func) p.start() print(p.name,p.pid) #打印进程名字和id Process-1 8220 p.name = '进程名改啦' print(p.name) #进程名会更改 p.terminate() #异步,主进程发出关闭子进程命令,交给操作系统执行,至于什么时候执行,主进程并不关心,如果操作系统不是立马执行了,下面打印子进程可能还活着。 print(p.is_alive()) #True time.sleep(2) #睡两秒,操作系统一定是已经执行完了终结命令,下面再判断进程是否活着,就是False print(p.is_alive()) #False