1.多进程
1)什么是多进程
一个正在运行的程序就是进程,是程序执行具体过程的一种表现,一个程序多次执行,就会产生多个进程,但是进程之间相互独立
本地IO input print sleep read write
网络IO recv send
2)非阻塞:程序正常运行中没有任何的IO操作,就处于非阻塞状态
3)并发:多个任务看起来同时在处理,本质上是切换执行,速度非常快
4)并行:多个任务真正的同时执行,必须具备多核cpu才能并行
阻塞 非阻塞 说的程序运行的状态
并发 并行 说的是任务的处理方式
from multiprocessing import Process import os def task(): print("子进程run") print(os.getpid()) if __name__ == '__main__': print(os.getpid()) p=Process(target=task,args=("xiecheng")) p.start() print("任务结束")
第二种方式
class myProcess(Process): def __init__(self,name): super().__init__() self.name=name def run(self): print(self.name) print("子进程 %s running!" % os.getpid()) print("子进程%s over!" % os.getpid()) # return self.name if __name__ == '__main__': p=myProcess("xiecheng").run() print(p,"父进程over")
4.常用属性
# p.join() # 等待子进程结束 # p.terminate() # 终止进程 # print(p.name) # 进程的名称 # print(p.is_alive()) #是否存活 # p.terminate() # 与start一样 都是给操作系统发送指令 所以会有延迟 # print(p.exitcode) # 获取退出码
1)
孤儿进程无害,有 其存在的必要性
例如:qq开启了浏览器,qq先退出了 浏览器应该继续运行
2)
值得是,子进程已经结束了,但是操作系统会保存一些进程信息,如PID,运行时间等,此时这个进程就称之为僵尸进程
僵尸进程如果太多将会占用大量的资源,造成系统无法开启新新进程
linux 中有一个wai/waitpid 用于父进程回收子进程资源
python会自动回收僵尸进程