python-- 程序的常用屬性、守護程序
阿新 • • 發佈:2021-06-25
常用屬性
- 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 importos 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)
執行會報錯