并发 : 遇到IO自动切换,能够提高效率的并发,分时:不一定能提高效率,只是让你的程序看起来在同时运行
并行:多个cpu的基础上,才有并行的概念,真正的同时在运行
进程三状态 : 就绪 运行 阻塞
同步异步:提交任务的方式:
异步 : 同时提交两个,两个任务都能够执行
同步:同时提交两个任务,但是两个任务排队执行,一个一个来
阻塞:程序遇到IO
非阻塞:不阻塞
异步非阻塞:***** 程序运行效率最高的
进程的两种创建方式:
From multiprocessing import Process
P = Process(target=f1,args=(i,)) kwargs={‘形参名’:值}
p.start()
If __name__ == ‘__main__’:
创建进程的代码
继承process:
Class MyProcess(Process):
Def xxxx(self):
Print(‘来啦客官’)
Def __init__(self,n):
Super().__init__()
Self.n = n
Self.xxxx()
Def run(self):
Self.xxxx()
Main
P = MyProcess(‘xx’)
P.start()
Join: 主进程等待子进程执行结束,才从join的地方继续执行
P = MyProcess(‘xx’)
P.start()
P.join()
Print(主进程结束)
For循环创建进程
For i in range(10):
P = MyProcess(‘xx’)
- start() #就是给操作系统发送了一个创建进程的信号,之后创建进程执行进程什么执行进程都是操作系统来管理的
今日内容:
进程的其他方法
进程id,进程名字,查看进程是否活着is_alive() terminate()发送结束进程的信号
僵尸进程和孤儿进程(了解)
验证进程之间是空间隔离的
守护进程:(**)
进程锁(同步锁/互斥锁) *****
Loc = Lock()
Loc.acquire()
需要锁的代码
Loc.release()
With loc:
需要锁的代码
生产者消费者模型
进程队列 ***** Queue()
Q = Queue(5)
Q.put() #满了会等待
Q.get() #没有数据了会等待
Q.qsize()
Q.empty() 不可靠
Q.full()不可靠
Q.get_nowait() #不等待,但是报错
Q.put_nowait() #不等待,但是报错
Joinablequeue: