守护进程
守护进程的特点:
- 其一:守护进程会在主进程代码执行结束后就终止
- 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
from multiprocessing import Process import time def task(name): print('%s is running' %name) time.sleep(2) # p = Process(target=task, args=('子进程1',)) # p.start() # 验证守护进程内不能创建进程 if __name__ == '__main__': ''' 守护进程会在主进程代码执行结束后终止 ''' p = Process(target=task,args=('子进程1',)) p.daemon=True # 必须在start之前设置,父进程代码执行结束,p即终止运行 p.start() p.join() print('主') ''' 打印结果: 子进程1 is running 主 '''
守护进程练习题
思考下列代码的执行结果有可能有哪些情况?为什么?
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.start() p2.start() print("main-------") # 只要执行到这行代码p1进程就死掉了 ''' 打印结果: main------- 456 end456
如果计算机的性能好的话:
123
end123
main-------
456
end456
原因:设置为守护进程的子进程,父进程先结束的话,p1终止运行 '''