进程:
进程就是一个正在执行的过程/程序
多进程:
一个程序执行多次就是多进程
import os import time print('爹是:',os.getppid())#这个爹pycharm print('儿是:',os.getpid()) time.sleep(30)
上面一个程序重复执行了三次 得到的三次不一样的pid值
创建子进程的两种方式:
from multiprocessing import Process import time #第一种 def fack(name): print('%s 开始'%name) time.sleep(3) print('%s 结束'%name) if __name__ == '__main__': # p=Process(target=fack,kwargs={'name':'yxlm'}) p=Process(target=fack,args=('yxlm',)) p.start() print('主====》') #第二种 class Yuang(Process): def __init__(self,name): super().__init__() self.name=name def run(self): print('%s 开始' % self.name) time.sleep(3) print('%s 结束' % self.name) if __name__ == '__main__': p=Yuang('yyyy') p.start() print('主====》')
进程的内存空间是相互隔离的:
from multiprocessing import Process import time x=1000 def fuck(): global x print(x) time.sleep(3) x=0 print(x) print(x)#父进程运行一次,子进程复制也运行了一次 if __name__ == '__main__': print(x) p=Process(target=fuck) p.start() time.sleep(5)#等子进程,运行结束值不变,就说明 相互隔离 print('主===>',x)
父进程 等待子进程结束:
from multiprocessing import Process import time def fuck(name): print('%s 开始'%name) time.sleep(3) print('%s 结束'%name) if __name__ == '__main__': p=Process(target=fuck,args=('ymub',))#元组的形式 p.start() p.join()#等待子进程结束 print('主====》')
进程对象的其他属性:
from multiprocessing import Process import time x=1000 def fuck(): global x time.sleep(3) x=0 print(x) if __name__ == '__main__': p=Process(target=fuck,name='张相玉最帅') p.start() print(p.pid)#pid号 print(p.name)#名字 p.terminate()#请求杀死子进程 p.join()#等待,和处理子进程的数据 print(p.is_alive())#打印是否存活 print('主===>')
僵尸进程和孤儿进程
僵尸进程就是子进程死了 儿子的数据留了下来,让父进程随时来调,如果父进程进入死循环或者父进程还没来得及清理儿子的尸体,就会占用过多的pid号导致 无用的占用 有危害
孤儿进程就是父进程死了 儿子过段时间会有人来带走 所以没有危害