进程对象的其他方法一: terminate与is_alive
is_alive() 立刻查看的子进程结果 是否存活
from multiprocessing import Process import time import os def task(name): print("%s is running" % (name)) time.sleep(3) print("%s is done" % (name)) if __name__ == "__main__": p = Process(target=task,args=("子进程",)) p.start() # 查看的子进程结果是否存活 print(p.is_alive()) p.join() # 查看的子进程结果是否存活 print(p.is_alive()) print("主",) ''' True 子进程存活 子进程 is running 子进程 is done False 子进程不存活 主 '''
terminate() 关闭子进程,这种也是给操作系统发送信号和start 一样
子进程还活着
from multiprocessing import Process import time import os def task(name): print("%s is running" % (name)) time.sleep(3) print("%s is done" % (name)) if __name__ == "__main__": p = Process(target=task,args=("子进程",)) p.start() # 关闭子进程 给操作系统发送信号 p.terminate() print(p.is_alive()) p.join() print("主",) ''' True 子进程还活着 主 '''
关闭子进程,把内存空间回收,是操作系统做的,但是什么时候关闭进程的时间就不知道了
terminate() 只是发送信号
解决:需要time.sleep() 让程序睡的时间长点
信号发出后,需要操作系统反应一段时间
from multiprocessing import Process import time import os def task(name): print("%s is running" % (name)) time.sleep(3) print("%s is done" % (name)) if __name__ == "__main__": p = Process(target=task,args=("子进程",)) p.start() # 关闭子进程 给操作系统发送信号 p.terminate() time.sleep(3) print(p.is_alive()) p.join() print("主",) ''' False 主 '''
pid 查看子进程pid
p.pid
name 查看子进程名字
p.name
不设置进程名字 默认会给子进程 设置名字 Process-1