• 进程创建&僵尸进程&孤儿进程


    一、创建并开启子进程的两种方式

    1.1方式一

    #单个进程
    from multiprocessing import Process
    import time
    
    def Text():
        print('我是一个子进程')
        print('我的进程开始了')
        time.sleep(2)
        print('我的进程结束了')
    
    
    if __name__ == '__main__':  #windows下必须要写这一句,不然会报错
        p = Process(target = Text)   #实例化产生一个对象
        p.start()   # 告诉操作系统我要开子进程,告诉完了这行代码就算执行完了,接着往下走,具体操作系统什么时候开子,开多长时间跟你没关系
        time.sleep(5)
        print('我是主进程,我要结束了')
    #多个进程
    from multiprocessing import Process
    import time
    
    def Text(x):
        print(f'我是子进程{x}')
        print(f'{x}的进程开始了')
        time.sleep(2)
        print(f'{x}的进程结束了')
    
    
    if __name__ == '__main__':  #windows下必须要写这一句,不然会报错
        p1 = Process(target = Text,args=('yjy',))   #实例化产生一个对象  子进程1
        p2 = Process(target = Text,args=('ypp',))   #实例化产生一个对象  子进程2
        p1.start()   # 告诉操作系统我要开子进程,告诉完了这行代码就算执行完了,接着往下走,具体操作系统什么时候开子,开多长时间跟你没关系
        p2.start()   # 告诉操作系统我要开子进程,告诉完了这行代码就算执行完了,接着往下走,具体操作系统什么时候开子,开多长时间跟你没关系
        time.sleep(5)
        print('我是主进程,我要结束了')

    1.2 方式二

    from  multiprocessing import Process
    import time
    
    class Text(Process):  #定义一个类,让他继承Process
        def __init__(self,name):    #重写__init__
            super().__init__()   #继承父类的__init__方法
            self.name = name
    
        def run(self):  #定义一个函数
            print(f'子进程的姓名为{self.name},子进程开始')
            time.sleep(2)
            print(f'{self.name}进程结束')
    
    
    if __name__ == '__main__':
        p = Text('yjy')
        p.start()  #通知操作系统子进程开始
        print('主进程结束')

    二、验证进程的内存空间隔离


    from multiprocessing import Process
    import time
    
    x = 0  #定义一个变量x
    def Check():
        global x
        x = 100
        print(f'子进程的x:{x}')
    
    
    if __name__ == '__main__':
        p = Process(target=Check)
        p.start()
        print(f'父进程的x:{x}')
       
    -----------------------------------------------------------------------------------
    父进程的x:0
    子进程的x:100

    父进程的x和子进程的x不是一个值,说明他们两个进程互不影响!

    三、僵尸进程与孤儿进程


    僵尸进程(有害):当子进程结束的时候,不会将所有内容都释放掉,他会留下自己的pid(类似身份证号码)供父进程来查看,此所谓进程死了没死干净,这就是僵尸进程,他会等待父进程最后把他处理掉

    孤儿进程(无害):一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

  • 相关阅读:
    【需求征集系统】打卡(五)
    【需求征集系统】打卡(五)
    《需求分析与系统设计》阅读笔记(一)
    每周总结【2020/10/24】————Redis与Mongodb初学
    【需求征集系统】打卡(四)
    【需求征集系统】打卡(三)
    初步自学Java小结
    关于“教室派”APP的使用报告和相关建议
    冲刺第一天
    结对开发之求环形数组的最大值
  • 原文地址:https://www.cnblogs.com/lulingjie/p/11529097.html
Copyright © 2020-2023  润新知