1. 程式人生 > 其它 >python-- 程序的常用屬性、守護程序

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)

執行會報錯