• 进程


    Process对象方法:

    join方法:

    • 在子进程执行完毕后才继续主进程执行,否则一直在原地阻塞

    • 判断主进程内子进程是否执行完毕

    from multiprocessing import Process
    import time
    import random
    def task(name):
        print('%s is piaoing' %name)
        time.sleep(random.randint(1,3))
        print('%s is piao end' %name)
    if __name__ == '__main__':
        p1=Process(target=task,args=('egon',))
        p2=Process(target=task,args=('alex',))
        p3=Process(target=task,args=('yuanhao',))
        p4=Process(target=task,args=('wupeiqi',))
        p1.start()
        p2.start()
        p3.start()
        p4.start()
        
    p.join()是让主线程等待p的结束,卡住的是主进程而绝非子进程p
    

    进程对象的其他方法一:terminate与is_alive、

    • p.is_alive() 判断是否存在子进程

      • p.terminate() 告诉操作系统,终止子进程

    from multiprocessing import Process
    import time
    import random
    def task(name):
        print('%s is piaoing' %name)
        time.sleep(random.randrange(1,5))
        print('%s is piao end' %name)
    if __name__ == '__main__':
        p1=Process(target=task,args=('egon',))
        p1.start()
        p1.terminate() #关闭进程不会立即关闭,所以is_alive立刻查看的结果可能还是存活
        print(p1.is_alive)  # 判断是否存活
        
    

    进程对象的其他属性:name与pid

    • pid 进程号

      • name 指定进程名

    from multiprocessing import Process
    import time
    import random
    def task(name):
        print('%s is piaoing' %name)
        time.sleep(random.randrange(1,5))
        print('%s is piao end' %name)
    if __name__ == '__main__':
        p1=Process(target=task,args=('egon',),name='子进程1') #可以用关键参数来指定进程名
        p1.start()
        print(p1.name,p1.pid,)
    

    僵尸进程: - 子进程已经结素,但是pid号为被销毁

    --占用pid 进程孤儿进程

    孤儿进程: - 子进程还在执行,但父进程意外结束

    - 擦破做系统福利院1 --》 回收孤儿进程

    守护进程: - 主进程结束后,主进程产生的子进程都结束 (daemon)

    -守护进程会在主进程代码执行结束后就终止

    -守护进程内无法再开启子进程,否则抛出异常

    from multiprocessing import Process
    import time
    import random
    def task(name):
        print('%s is piaoing' %name)
        time.sleep(random.randrange(1,3))
        print('%s is piao end' %name)
    if __name__ == '__main__':
        p=Process(target=task,args=('egon',))
        p.daemon=True #一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
        p.start()
        print('主') #只要终端打印出这一行内容,那么守护进程p也就跟着结束掉了
    

    进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱

    进程产生子进程,会在开辟一个名称空间,进程之间互不干扰!!

  • 相关阅读:
    silverlight 视频
    Win7/Vista下安装SQL Server 2005/2008后,进行附加数据库错误的解决
    IIS篇
    ARCGIS 定位篇
    sqlserver 2008 修改表结构不能保存
    更新silverlight 后 无法启动调试 未安装silverlight developer 运行时解决办法
    2点经纬度计算相对方位
    VS2010中文旗舰版在WIN7 64位操作系统下安装
    self = [super init]
    NSXMLParser XML 解析 解压
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11714474.html
Copyright © 2020-2023  润新知