會隨着主進程的結束而結束。json
主進程建立守護進程小程序
其一:守護進程會在主進程代碼執行結束後就終止網絡
其二:守護進程內沒法再開啓子進程,不然拋出異常:code
''' 守護進程 守護--》伴隨 本質也是一個子進程 主進程的代碼執行完畢守護進程直接結束。 ''' from multiprocessing import Process import time def foo(): print('守護進程 start') time.sleep(5) print('守護進程 end') if __name__ == '__main__': p = Process(target=foo) p.daemon = True#必定要在p.start()前設置,設置p爲守護進程,禁止p建立子進程,而且父進程代碼執行結束,p即終止運行 p.start() time.sleep(2)# 把這個子進程定義爲了守護進程 print('主進程') ############# 守護進程 start 主進程
from multiprocessing import Process import time def foo(): print('守護進程 start') time.sleep(3) print('守護進程 end') def task(): print('process start') time.sleep(5) print('process end') if __name__ == '__main__': p = Process(target=foo) p2 = Process(target=task) p.daemon = True p.start() p2.start() time.sleep(1) print('主進程') ################ 守護進程 start process start 主進程 process end
#db.txt {"count": 10}
from multiprocessing import Process import json import os import time def search(): time.sleep(1) ##模擬網絡IO with open('db.txt', mode='rt', encoding='utf8') as f: res = json.load(f) print(f'還剩餘{res["count"]}') def get(): with open('db.txt', 'rt', encoding='utf8') as f: res = json.load(f) time.sleep(1) if res['count'] > 0: res['count'] -= 1 with open('db.txt', 'wt', encoding='utf8') as f: json.dump(res, f) time.sleep(1.5) print(f'進程{os.getpid()}搶票成功') else: print("票已經成功售空!!!") def task(): search() get() if __name__ == '__main__': for i in range(15): p = Process(target=task) p.start() p.join() ################ 還剩餘10 進程17808搶票成功 還剩餘9 進程17504搶票成功 還剩餘8 進程18052搶票成功 還剩餘7 進程17620搶票成功 還剩餘6 進程5480搶票成功 還剩餘5 進程9372搶票成功 還剩餘4 進程18108搶票成功 還剩餘3 進程15816搶票成功 還剩餘2 進程4644搶票成功 還剩餘1 進程18044搶票成功 還剩餘0 票已經成功售空!!! 還剩餘0 票已經成功售空!!! 還剩餘0 票已經成功售空!!! 還剩餘0 票已經成功售空!!! 還剩餘0 票已經成功售空!!!