一、守护进程
1、主进程创建守护进程
其一:守护进程会在主进程代码执行结束后就终止
其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children
注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止
2、程序核心表现:
p.daemon=True
注意要求:一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行

from multiprocessing import Process import time class MyProcess(Process): def __init__(self,name): super().__init__() self.name=name def run(self): print("子进程开始") print("启动视频,开始战斗") time.sleep(0.5) print("%s和心仪的女主播大战了几百回合"%self.name) time.sleep(2) print("关闭视频") if __name__ == '__main__': p=MyProcess("太白") # 一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行 p.daemon=True p.start() time.sleep(0.5) print("猪")
二、同步锁
通过刚刚的学习,我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制。尽管并发编程让我们能更加充分的利用IO资源,但是也给我们带来了新的问题:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理。
加锁可以保证多个进程修改同一块数据时,同一时间只有一个任务可以进行修改,即串行修改,这样做的话牺牲了速度,保证了数据安全。

#加锁保证数据安全,不出现混乱 from multiprocessing import Process,Lock import json,time,random #查看剩余票数 def search(): dic=json.load(open("db","r")) #打开文件,直接load文件中的内容,拿到文件中的包含剩余票数的字典 print("