并发编程知识点汇总

所谓并发就是有多个进程 在同一时刻执行同一段代码
子进程中不能有input,因为主进程与子进程是两个单独的进程

多进程实现并发效果
开启多进程有两种方法
人为和内存打交道或者硬盘和内存打交道,不涉及到cpu计算的就是一个IO,
例如input或者从硬盘读取文件都是一个IO

操作系统的作用:
(1)隐藏硬件接口,提供良好的抽象接口
(2)管理、调度进程,将多个进程对硬件的竞争变的有序
运行中的程序就是进程
程序是一个没有生命的实体,只有运行它的时候才会成为一个活动的实体,我们称之为进程

join():确保上面进程执行完毕再执行下面的代码,也就是使异步变为同步
多个进程之间的数据是完全隔离的,就算父进程与子进程之间的数据也是完全隔离的



同步:
异步:
单进程:
多进程:
阻塞:
非阻塞:

多进程中子进程常用属性和方法:
start():开始一个子进程
join():感知一个子进程的结束
terminate():结束一个进程
is_alive():检查一个进程是否结束
name:查看进程名
daemon:为True的时候,表示新的子进程是一个守护进程
守护进程:在start之前设置daemon为True
随着主进程的代码执行完毕而结束,这个子进程称之为守护进程,而不是随着主进程的结束而结束

△:当terminate一个进程时如果立即is_alive进程会显示为True,
因为结束一个进程是向操作系统发送一个结束请求,系统不会立即反应过来,需要一个操作系统响应的过程

进程锁: from multiprocessing import Lock
lock = Lock()
需要加锁的代码前面:lock.acquire() #拿钥匙
需要加锁的代码前面:lock.release() #还钥匙
涉及到修改数据的代码操作都需要加锁

信号量: from multiprocessing import Semaphore
用途用法和进程锁一样,进程锁是控制一个进程工作,信号量是控制多个进程工作

事件:
from multiprocessing import Event
e = Event() #创建一个事件
print(e.is_set()) # 查看这个事件的阻塞状态,默认False
e.set() # 将这个事件的阻塞状态改为True
print(e.is_set())
e.wait() # 根据is_set()的值决定是否阻塞 True为不阻塞,False为阻塞
e.clear() # 将这个事件的阻塞状态改为False
print(e.is_set())

队列:
from multiprocessing import Queue
q = Queue(3)#创建队列,参数为可放入的数量
q.put(1)#放入数据
q.put(2)
q.put(3)
print(q.get())#取数据,如果为空就阻塞
print(q.full())#查看队列是否满了
print(q.get())#取查看队列是否有空位
try:
print(q.get_nowait())#取数据,如果为空不阻塞,所以可用捕捉异常,另行处理
except:
print("没值了")

猜你喜欢

转载自www.cnblogs.com/QimiSun/p/10012399.html