zoukankan      html  css  js  c++  java
  • (6)进程的其他属性以及守护进程

    进程的其他属性
     
    1、p.pid() :  #获取进程id
    2、os.getpid() :  #获取进程id
    3、os.getppid() :  #获取父进程id
    4、p.name:  #进程的名称
    5、p.daemon: #默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置
    6、p.is_alive():  #如果p仍然运行,返回True
     
     
    查看主进程号
    import time
    from multiprocessing import Process


    def task(x):
    print('%s is runing'% x)
    time.sleep(2)
    print('%s is done' % x)

    if __name__ == '__main__':
    p = Process(target=task,args=('子进程',))
    p.start()
    print(p.pid) #打印进程号
    print('主进程。。。')
     
    查看子进程号
    import time,os # 需要调用os模块的下的getpid()方法
    from multiprocessing import Process


    def task(x):
    print('%s is runing %s'% (x,os.getpid()) #在子进程内查看进程号
    time.sleep(2)
    print('%s is done' % x)

    if __name__ == '__main__':
    p = Process(target=task,args=('子进程',))
    p.start()
    print('主进程。。。')
     
    查看父进程号
    PS:父进程就是整个程序的进程
    import time,os # 需要调用os模块的下的getpid()方法
    from multiprocessing import Process


    def task(x):
    print('%s is runing %s'% (x,os.getpid()) #在子进程内查看父进程号
    time.sleep(2)
    print('%s is done' % x)

    if __name__ == '__main__':
    p = Process(target=task,args=('子进程',))
    p.start()
    print('主进程。。。')
     
    查看进程名称
    import time
    from multiprocessing import Process


    def task(x):
    print('%s is runing %s'% x)
    time.sleep(2)
    print('%s is done' % x)

    if __name__ == '__main__':
    p = Process(target=task,args=('子进程',))
    p.start()
    print(p.name) #如果没有设置进程名称,默认是Process-1
    print('主进程。。。')
     
    自定意义进程名称
    import time
    from multiprocessing import Process


    def task(x):
    print('%s is runing %s'% x)
    time.sleep(2)
    print('%s is done' % x)

    if __name__ == '__main__':
    p = Process(target=task,args=('子进程',),name='QQ') # 在括号内的参数name定义一个名称,这个name就是给进程定义名称的参数
    p.start()
    print(p.name)
    print('主进程。。。')
     
    判断进程是否存活
    import os
    import time
    from multiprocessing import Process


    def task(x):
    print('%s is runing %s' % (x,os.getppid())) # getppid查看父进程号
    time.sleep(2)
    print('%s is done %s' % (x,os.getppid()))


    if __name__ == '__main__':
    p = Process(target=task, args=('子进程',), name='QQ')
    p.start()
    print(p.name) # 打印进程名称
    print(p.is_alive()) # is_alive就是判断进程是否结束,如果没结束则是True,结束则是False
    print('主进程。。。')
     
    守护进程
    import time
    from multiprocessing import Process


    def task(x):
    print('%s is runing %s'% x)
    time.sleep(2)
    print('%s is done' % x)

    if __name__ == '__main__':
    p = Process(target=task,args=('子进程',),name='超级进程')
    p.daemon = True # 这个就是守护进程,如果是True则开启,守护的是父进程,当父进程执行完毕后子进程也会结束
    #PS:这个p.daemon必须在开启主进程之前设置成守护进程
    p.start()

    print('主进程。。。') #这个代码执行完,就代表整个主进程执行完毕
     
    守护进程实例
    from multiprocessing import Process
    import time
    def foo():
    print(123)
    time.sleep(1)
    print("end123")
    def bar():
    print(456)
    time.sleep(3)
    print("end456")
    if __name__ == '__main__':
    p1=Process(target=foo)
    p2=Process(target=bar)
    p1.daemon=True #这里将p1开启守护进程
    p1.start()
    p2.start()
    time.sleep(2) #这里如果延迟1秒,则foo子进程内的end123不会运行,因为主进程和子进程是异步的
    p.join() # 等待子进程执行完毕在执行主进程
    print("main-------")

    PS:当p1开启守护进程时候,主进程运行快与子进程,所以foo这段代码是不会运行,在主进程前设置延迟3秒,两个字进程内代码都会运行
    PS:当主进程的延迟高于子进程,则子进程有足够的时间运行结束,所有子进程都能运行
     
     
     
     
     
     
     
  • 相关阅读:
    golang切片使用append追加内容导致切片值异常问题
    golang对通道进行select,case生效异常问题
    golang defer未按预期顺序执行
    GO实现无锁队列
    mysql建表报错:Specified key was too long
    右键快捷键
    算法与数据结构基础<三>----数据结构基础之栈和队列加强之用栈实现队列
    ios从入门到放弃之C基础巩固-----数组、字符串
    获取股票数据【使用JQData查询行情数据、财务指标、估值指标】
    IDEA配置.gitignore不生效的问题
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10231843.html
Copyright © 2011-2022 走看看