什么是进程?
进程是计算机中最小的资源分配单位
进程与进程之间数据隔离,执行过程异步
为什么会出现进程的概念?
合理利用cpu ,提高用户体验
多个进程是可以同时利用多个CPU的,可以实现并行的效果
在主进程中控制子进程的方法?
子进程对象 = Process(target,args) 在创建的这一刻根本就没有通知操作系统
子进程对象.start() 通知操做系统,开启子进程,异步非阻塞
子进程对象.terminate() 通知操作系统,结束子进程,异步非阻塞
子进程对象.is_alive() 查看进程及是否还活着
子进程对象.join() 阻塞,直到子进程结束
子进程对象.join(timeout = 10) 阻塞最多10s,期间子进程如果结束就结束阻塞,如果没结束10s之后也结束阻塞
信号量:
对于锁 保证一段代码同一时刻只能有一个进程执行
对于信号量 保证一段代码同一时刻只能有n个进程执行
流量控制
10个进程
守护进程
守护进程是一个子进程
守护进程会在主进程代码结束之后才结束
为什么会这样?
由于主进程必须要回收所有的子进程的资源
所以主进程必须在子进程结束之后才能结束
而守护进程就是为了守护主进程存在的
不能守护到主进程结束,就只能退而求其次,守护到代码结束了
守护到主进程的代码结束,意味着如果有其他子进程没有结束,守护进程无法继续守护
解决方案 : 在主进程中加入对其他子进程的join操作,来保证守护进程可以守护所有主进程和子进程的执行
如何设置守护进程
子进程对象.daemon = True 这句话写在start之前
锁
为什么要用锁?
由于多个进程的并发,导致很多数据的操作都在同时进行
所以就有可能产生多个进程同时操作 : 文件数据库 中的数据
导致数据不安全
所以给某一段修改数据的程序加上锁,就可以控制这段代码永远不会被多个进程同时执行
保证了数据的安全
Lock 锁(互斥锁)
锁实际上是把你的某一段程序变成同步的了,降低了程序运行的速度,为了保证数据的安全性
没有数据安全的效率都是耍流氓