进程的同步控制
1.进程中间的数据是隔离的
1.1经常与经常之间是不能自由的交换内存数据的
1.2全局的变量在子进程中修改,主进程和其他进程是感知不到而且不变的
2.守护进程
2.1 特点
生命周期只有和主经常的代码有关系,和其他子经常没有关系
守护经常会在主进程的代码执行完毕之后直接结束,无论守护经常是否执行完毕
2.2 代码表示
p.daemon = True
守护经常属性.默认是False,如果设置成True,就表示设置这个子进程为 一个守护进程
3.经常的同步控制
进程之间有一些简单的信号来传递,但是用户不能感知,且用户不能传递自己想传递的内容
3.1 锁
多个经常共享一段数据时,数据会出现不安全现象,需要用锁来维护数据安全
代码:
form multiprocessing import Lock lock = Lock() #创造一把锁 lock.acquire() #上锁获取这把锁的钥匙 loc.release() # 归还这把锁
3.2 信号量
本质是多把钥匙对应一把锁
lock + 计数器实现
form multiprocessing import Semaphore sem = Semaphore(4) # 创造一把有几个钥匙的锁 lock.acquire() # 上锁获取这把锁的钥匙 loc.release() # 归还这把锁
3.3 事件
代码:
form multiprocessing import Evente e = Evente e.wait() # 等待 # 阻塞 状态是False,那么就是阻塞 # 非阻塞 状态是Ture,那么就是非阻塞 e.is_set # 查看标志状态 事件创造之处默认是False e.set() # 将标志状态改为Ture e.clear()# 将标志状态改为False e.wait(timeout =10) # 如果信号在阻塞10s之内变为True,那么不继续阻塞直接pass # 如果就阻塞10s之后状态还是没变,那么继续,