会随着主进程的结束而结束。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 票已经成功售空!!!