python-- 进程的常用属性、守护进程

常用属性

  • p.name = 给p进程一个名字
  • p.pid 返回p进程的pid
  • p.daemon = True 将p进程设置为守护进程。(True为守护进程,False为普通进程)
from multiprocessing import Process
import os
import time


def func():
    print('这里是儿子,儿子的pid是%s' % (os.getpid()))


if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.name = 'zou'
    print('儿子的名字是%s' % (p.name))
    print('儿子的pid是%s' % (p.pid))
    print('儿子是不是守护进程?', p.daemon)

结果:

儿子的名字是zou
儿子的pid是3706
儿子是不是守护进程? False
这里是儿子,儿子的pid是3706

守护进程

  • 守护进程,必须要在start之前设置,之后设置会报错
  • 守护进程:跟随着父进程的代码执行结束,守护进程就结束(不严谨,看下面的例子)
  • 守护进程:不允许开启子进程

没有守护进程

from multiprocessing import Process
import os
import time


def func():
    print('子进程结束了')


if __name__ == '__main__':
    p = Process(target=func)
    p.start()
    p.name = 'zou'
    print('主进程结束了')

结果:

主进程结束了
子进程结束了

没有守护进程时,主进程结束了,子进程还在执行

有守护进程

from multiprocessing import Process
import os
import time


def func():
    print('子进程结束了')


if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 将p进程设置为守护进程,必须要在start之前设置
    p.start()
    p.name = 'zou'
    print('主进程结束了')

结果:

主进程结束了

将p进程设置为守护进程后,主进程结束后,不管子进程执行到哪,子进程都会结束

from multiprocessing import Process
import os
import time


def func():
    time.sleep(1)
    print('子进程结束了')


if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 将p进程设置为守护进程,必须要在start之前设置
    p.start()
    p.name = 'zou'
    print('主进程结束了')
    p.join()

结果:

主进程结束了
子进程结束了

如果有join()则会等待子进程结束完

守护进程:不允许开启子进程

没有设置守护进程时

from multiprocessing import Process
import time


def demo():
    print('demo....')


def func():
    p1 = Process(target=demo)
    p1.start()
    print('子进程结束了')


if __name__ == '__main__':
    p = Process(target=func)
    # p.daemon=True# 将p进程设置为守护进程,必须要在start之前设置
    p.start()
    p.name = 'zou'
    print('主进程结束了')
    time.sleep(2)

结果:

可以启动子进程

主进程结束了
子进程结束了
demo....

设置了守护进程

from multiprocessing import Process
import os
import time


def demo():
    print('demo....')


def func():
    p1 = Process(target=demo)
    p1.start()
    print('子进程结束了')


if __name__ == '__main__':
    p = Process(target=func)
    p.daemon = True  # 将p进程设置为守护进程
    p.start()
    p.name = 'zou'
    print('主进程结束了')
    time.sleep(2)

运行会报错

 

posted @ 2021-06-25 21:56  邹邹很busy。  阅读(176)  评论(0编辑  收藏  举报