常用属性 p.name = 给p进程一个名字 p.pid 返回p进程的pid p.daemon = True 将p进程设置为守护进程。(True为守护进程,False为普通进程) from multiprocessing import Process import os import time def func():
常用属性
- p.name = 给p进程一个名字
- p.pid 返回p进程的pid
- p.daemon = True 将p进程设置为守护进程。(True为守护进程,False为普通进程)
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 Processimport os
import time
def func():
print('子进程结束了')
if __name__ == '__main__':
p = Process(target=func)
p.start()
p.name = 'zou'
print('主进程结束了')
结果:
主进程结束了子进程结束了
没有守护进程时,主进程结束了,子进程还在执行
有守护进程
from multiprocessing import Processimport 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 Processimport 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 Processimport 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 Processimport 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)
运行会报错