守护进程
会随着主进程的结束而结束。
主进程创建守护进程
其一:守护进程会在主进程代码执行结束后就终止
其二:守护进程内无法再开启子进程,否则抛出异常:
'''
守护进程
守护--》伴随
本质也是一个子进程
主进程的代码执行完毕守护进程直接结束。
'''
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
票已经成功售空!!!